为什么这个while循环永远不会终止?

我真的坚持理解这一概念。我的一次考试中有一个 while 循环,即使我知道打印的是什么,我也不知道为什么。


这是代码:


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);

    }

}


哈士奇WWW
浏览 118回答 5
5回答

不负相思意

因为length永远不会更新。while (length > 1){   System.out.print((length - 1) + " ");   xMethod(length - 1);   length--;}

慕尼黑的夜晚无繁华

正如另一个答案所指出的那样,您需要减少length变量以解决您当前的问题length = length - 1or length--。(我让我的“同事”回答更好地解释它)。我的回答主要是关于你对递归方法的使用。你可能想要的是一个简单的if条件。递归将充当循环。public static void xMethod(int length) {    length--;    System.out.print((length) + " ");    if (length > 1){        xMethod(length);    }}xMethod(5) > 4 3 2 1public static void xMethod(int length) {    length--;    if (length > 1){        xMethod(length);    }    System.out.print((length) + " ");}xMethod(5) > 1 2 3 4

缥缈止盈

长度完全没有变化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);}

拉风的咖菲猫

这里要补充的重要一点是了解分配在 Java 中是如何工作的。的值length没有改变,因为当您在方法中传递一个值并且它进入while循环时,当条件停止而不是xMethod(length-1);您使用的递归时循环停止。这就是为什么即使您添加length--它也不会打印您想要的内容。因此,要使程序正常运行,您必须为length变量赋值更改或删除递归。https://docs.oracle.com/javase/tutorial/java/nutsandbolts/op1.html一旦你浏览了这个链接,你就会明白为什么价值没有改变。注意:从链接中您知道length--等于length = length -1,所以基本上我们必须将更新后的值分配给length变量。

梦里花落0921

长度始终具有值 5。您应该将 length-1 替换为 length--。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);    }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java