Пока l oop in Java :: продолжайте деление, пока условие не выполнено - PullRequest
0 голосов
/ 29 апреля 2020

У меня есть базовый c код:

public class experiment {

    public static void main(String[] args) {
        System.out.println(experiment(80));
    }

    public static int experiment (int number) {
        while (number > 10) {
            number = number / 2;
            return number;
        } return -1;
    }
}

Он возвращает мне 40.

Таким образом, это означает, что не происходит зацикливание переменной number.

Я бы хотел, чтобы он продолжал цикл number (80, 40, 20, 10), пока не вернется 10.

Есть ли способ сделать это без использования for l oop?

Ответы [ 3 ]

1 голос
/ 29 апреля 2020

Переместите return из l oop:

public static int experiment (int number) {
    while (number > 10) {
        number = number / 2;
    }
    return number;
}

Если вам требуется -1 для особого случая, вы должны проверить его перед вводом l oop:

public static int experiment (int number) {
    if (number < 0) { // or some condition
        return -1;
    }
    while (number > 10) {
        number = number / 2;
    }
    return number;
}

Кстати, начните использовать отладчик, вы можете просмотреть этот вид кода и легко найти проблему.

0 голосов
/ 29 апреля 2020

Что плохого в том, что вы положили return number внутри while l oop, это завершит итерацию и вернет значение 40. Итак, вы должны,

public static int experiment (int number) {
    while (number > 10) {
        number = number / 2;
    } 
    return number;
}

Если вы хотите, чтобы все числа, которые l oop передал на печать;

public static void experiment (int number) {
    while (number > 10) {
        number = number / 2;
        System.out.println(number);
    } 
}
0 голосов
/ 29 апреля 2020

с использованием рекурсии:


public class test {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.out.println(test.toTen(80));

    }
    public static int toTen(int k) {
        if (k==10) {
            return k;
        }
        else {
            return toTen(k/2);
        }

    }

}

или просто отредактируйте l oop, например,

        while (k > 10) {
            k = k / 2;
        } 

        return k;
...