为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

哈士奇WWW 2022-10-07 17:32:37
我真的坚持理解这一概念。我的一次考试中有一个 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);    }}
查看完整描述

5 回答

?
不负相思意

TA贡献1777条经验 获得超10个赞

因为length永远不会更新。


while (length > 1){

   System.out.print((length - 1) + " ");

   xMethod(length - 1);

   length--;

}


查看完整回答
反对 回复 2022-10-07
?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

正如另一个答案所指出的那样,您需要减少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 1


public static void xMethod(int length) {

    length--;

    if (length > 1){

        xMethod(length);

    }

    System.out.print((length) + " ");

}

xMethod(5) > 1 2 3 4


查看完整回答
反对 回复 2022-10-07
?
缥缈止盈

TA贡献2041条经验 获得超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);

}


查看完整回答
反对 回复 2022-10-07
?
拉风的咖菲猫

TA贡献1995条经验 获得超2个赞

这里要补充的重要一点是了解分配在 Java 中是如何工作的。

的值length没有改变,因为当您在方法中传递一个值并且它进入while循环时,当条件停止而不是xMethod(length-1);您使用的递归时循环停止。这就是为什么即使您添加length--它也不会打印您想要的内容。

因此,要使程序正常运行,您必须

  1. length变量赋值

  2. 更改或删除递归。

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

一旦你浏览了这个链接,你就会明白为什么价值没有改变

注意:从链接中您知道length--等于length = length -1,所以基本上我们必须将更新后的值分配给length变量。


查看完整回答
反对 回复 2022-10-07
?
梦里花落0921

TA贡献1772条经验 获得超6个赞

长度始终具有值 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);

    }

}


查看完整回答
反对 回复 2022-10-07
  • 5 回答
  • 0 关注
  • 117 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号