【问题标题】:Logic problem with the simple nested loop简单嵌套循环的逻辑问题
【发布时间】:2019-10-10 19:29:15
【问题描述】:

我正在尝试一个简单的嵌套循环。对于 num1 中的每个数字,应该运行内部循环。 对于以下数字,理想的输出应该是:

num1 digit: 7
num2 digit: 4
num2 digit: 3
num1 digit: 5
num2 digit: 4
num2 digit: 3

但它没有第二次运行内循环,所以它只打印这个:

num1 digit: 7
num2 digit: 4
num2 digit: 3
num1 digit: 5

逻辑有什么问题?

num1 = 57;
num2 = 34;
while ( num1 > 0 ) {

    digit1 = num1 % 10;
    num1 = num1 / 10;
    System.out.println("num1 digit: " + digit1);

    while (num2 > 0 ) {
        digit2 = num2 % 10;
        System.out.println("num2 digit: " + digit2);
        num2 = num2 / 10;
    }
}

【问题讨论】:

  • num2 = num2 / 10; 修改 num2 以便在内循环运行一次后,对于外循环的后续迭代,num2 为零。您需要在内循环之后重置它。或者使用临时变量:int temp = num2; while (temp > 0).....
  • 注意,另一种选择是使用 for 循环:for (int i = num2; i > 0; i /= 10) {digit2 = i % 10; System.out.println("num2 digit: " + digit2);} 这也会创建一个临时变量 (i),但更紧凑。
  • @JohnnyMopp 非常感谢,您的评论很有帮助。

标签: java loops while-loop nested-loops


【解决方案1】:

您正在更改循环内的 num2,请尝试以下操作:

num1 = 57;
num2 = 34;
int tempNum2 = num2;
while ( num1 > 0 ) {

    digit1 = num1 % 10;
    num1 = num1 / 10;
    System.out.println("num1 digit: " + digit1);

    while (tempNum2 > 0 ) {
        digit2 = tempNum2 % 10;
        System.out.println("num2 digit: " + digit2);
        tempNum2 = tempNum2 / 10;
    }
    tempNum2 = num2;
}

【讨论】:

  • 您两次声明 tempNum2int 作为次要修复。
  • 另一件小事是你仍然在whilenum2 % 10 的第二个循环中使用num2,代码将运行但打印不正确的结果。
  • @Nexevis 好吧,我今天应该停止回答了,我的大脑已经无法使用了。谢谢!
【解决方案2】:

您需要在while循环中重新声明num2整数为num1 > 0才能再次运行num2 > 0;

int num1 = 57;
int num2 = 34;
while ( num1 > 0 ) {
    digit1 = num1 % 10;
    num1 = num1 / 10;
    System.out.println("num1 digit: " + digit1);

    while (num2 > 0 ) {
         digit2 = num2 % 10;
         System.out.println("num2 digit: " + digit2);
         num2 = num2 / 10;
    }

    //Add here
    num2 = 34;
 }

【讨论】:

  • 这个解决方案不是最优的,因为它需要将34 硬编码到代码中两次。 34 很可能并不总是值,这就是为什么临时变量是理想的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-29
  • 1970-01-01
相关资源
最近更新 更多