Почему этот цикл while никогда не завершается? - PullRequest
0 голосов
/ 16 апреля 2019

Я действительно застрял в понимании этой единственной концепции. У меня была временная петля от одного из моих экзаменов, и хотя я знаю, что печатает, я не знаю почему.

Вот код:

class Test {
    public static void xMethod(int length) {
        while (length > 1){
            System.out.print((length - 1) + " ");
            xMethod(length-1);
        }
    }

    public static void main(String[] args){
        xMethod(5);
    }
}

Ответы [ 5 ]

3 голосов
/ 16 апреля 2019

Потому что length никогда не обновляется.

while (length > 1){
   System.out.print((length - 1) + " ");
   xMethod(length - 1);
   length--;
}
2 голосов
/ 16 апреля 2019

Как указано в другом ответе, вам нужно уменьшить значение переменной length, чтобы исправить текущую проблему с length = length - 1 или length--. (Я позволю своему «коллеге» ответить, чтобы объяснить это лучше).


Мой ответ в основном о том, что вы используете рекурсивный метод.

То, что вы, вероятно, хотите, это простое условие if. Рекурсия будет действовать как цикл.

public static void xMethod(int length) {
    length--;
    System.out.print((length) + " ");
    if (length > 1){
        xMethod(length);
    }
}

xMethod (5)> 4 3 2 1

public static void xMethod(int length) {
    length--;
    if (length > 1){
        xMethod(length);
    }
    System.out.print((length) + " ");
}

xMethod (5)> 1 2 3 4

0 голосов
/ 16 апреля 2019

Здесь важно добавить, чтобы понять, как работают назначения в Java.

Значение length не изменяется, потому что когда вы передаете значение в методе и оно входит в while loop, цикл останавливается, когда останавливается условие, но не рекурсия xMethod(length-1);, которую вы использовали.Вот почему, даже если вы добавите length--, он не будет печатать то, что вам нужно.

Поэтому, чтобы программа работала правильно, вам нужно

  1. Назначить значение переменной length
  2. Изменить или удалить рекурсию.

https://docs.oracle.com/javase/tutorial/java/nutsandbolts/op1.html

И, пройдя по ссылке, вы поймете , почему значение не являетсяизменение .

Примечание: По ссылке вы узнаете, что length-- равно length = length -1, поэтому в основном мы должны присвоить обновленное значение переменной length.

0 голосов
/ 16 апреля 2019

длина всегда имеет значение 5. Вы должны заменить длину-1 длиной -.

class Test {
    public static void xMethod(int length) {
        while (length > 1){
            System.out.print((length--) + " ");
            xMethod(length);
        }
    }

    public static void main(String[] args){
        xMethod(5);
    }
}
0 голосов
/ 16 апреля 2019

Длина не меняется вообще

class Test {
public static void xMethod(int length) {
    while (length > 1){
        System.out.print((length - 1) + " ");
        xMethod(length-1);
        //need to change the length here
    }
}

public static void main(String[] args){
    xMethod(5);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...