Java中的循环不符合条件?

时间:2014-11-10 05:59:48

标签: java loops math

我一直在思索为什么Java会在某些循环中超出指定条件,而看似坚持其他循环中的条件。我知道这对我来说缺乏了解,但我很困惑,当我手动计算代码时,我应该过去或坚持这个条件。

作为一个例子,我输入了一个简短的for循环,最终结果是iTotal为15,而iNumber为0。当我最初在纸上逐步进行计算时,我得到了iTotal中14的答案,以及iNumber中的1个答案。我假设代码不会低于1,因为条件大于零,不等于或大于零。

我最初的尝试 -

ITOTAL 0 五 9 12 14

i编号 5 4 3 2 1

    int iTotal = 0;
    for (int iNumber = 5; iNumber > 0; iNumber--)
        iTotal = iTotal + iNumber;

相比之下,下面的代码片段在19处的条件小于20,最后一个语句的值为x:19 。我正确地计算了,但是我不确定为什么上面的代码忽略了条件并且变为零,而下面的代码遵守条件并且在19处停止。

for(int x = 10; x < 20; x = x+1) {
  System.out.print("value of x : " + x); 
  System..out.print(num2 + " " + num1); 

有没有人可以澄清java如何解释在特定条件下过去或停止的时间?

3 个答案:

答案 0 :(得分:1)

你的第一个循环

for (int iNumber = 5; iNumber > 0; iNumber--)
    iTotal = iTotal + iNumber;

是5 + 4 + 3 + 2 + 1 = 15(在添加第一个iTotal之前,您必须打印iNumber)。第二个循环类似于当条件计算为false时未输入循环体。

int x = 10;
for(; x < 20; x = x+1) {
  System.out.print(x + " ");
}
System.out.println(x); // x is 20

为10,11,12,13,14,15,16,17,18,19,20,但在二十一时,循环终止。

答案 1 :(得分:1)

  

相比之下,下面的代码片段将在19处,条件为   小于20,最后一个陈述是x的值:19   计算得当,但我不确定为什么上面的代码会忽略   条件并归零,而下面的代码遵循   条件并在19点停止。

你说的不对。打印的最后一个语句是19,但x的最后一个值是20.你给出的这个循环实际上执行了20次。 Java中的for循环就像你给出的循环有3个组件,一个整数用作计数,一个要测试的条件,以及如何转换计数变量。在一般形式中,它看起来像这样:

for(count variable, condition, transformation){
//Code goes here
//End loop
}

这个for循环一直执行,直到条件不再为真,这是由于对某个count变量应用某种变换引起的。

使用你给出的for循环作为例子:

for(int x = 10; x < 20; x = x+1) {
  System.out.print("value of x : " + x); 
  System..out.print(num2 + " " + num1); 
}
  1. 我们创建计数变量(int x)并将其设置为10
  2. 我们根据条件(int x)检查计数变量(x<20)并评估结果x < 20 == true,以便运行循环中的代码。在代码的末尾,我已经标记了&#34; End Loop&#34;转换之前(x + 1)应用于count变量,然后再次测试条件以查看循环是否应继续。
  3. x = 11现在因为x等于10但我们在最后一个循环结束时添加了一个。 x < 20 == true仍然是正确的,因此循环中的代码将再次执行。这样就一直持续到最后一个数字。
  4. 当x = 19时,我们按照我们一直在做的情况测试条件,看看x < 20 == true是否仍然为真,这样就执行了代码。当代码执行结束时,count变量再次递增so x = 20
  5. x = 20我们再次对x < 20进行测试。这一次x < 20 == false因此循环内的代码不会被执行,也不会将另一个转换应用于变量。此时,当条件变为假时,循环结束。因为我们在第20个循环中说x < 20而不是x <= 20,当x = 20时,这段代码:

    System.out.print(&#34; x的值:&#34; + x); System..out.print(num2 +&#34;&#34; + num1);

    不会运行。这意味着程序的最终输出将在x = 19不在x=20时发生,尽管如果在循环结束后你仍然能够访问count变量(我相信你可以用调试器做)你会看到x=20

  6. 第一个循环执行此操作:

    1. iTotal = 0
    2. iTotal = 5
    3. iTotal = 9
    4. iTotal = 12
    5. iTotal = 14
    6. iTotal = 15
    7. 循环结束
    8. 同样,第一个循环转换被写为x--而不是x - 1,第二个循环可以重写为:

      for(int x = 10; x < 20; x++) {
        System.out.print("value of x : " + x); 
        System..out.print(num2 + " " + num1); 
      }
      

      在Java中,++运算符增加1,与x+1相同。

答案 2 :(得分:0)

在每个循环之前检查条件,而不是之后。所以在你的第一个例子中,逻辑将会出现:

  • iNumber = 5
  • 第一次循环迭代
    • 检查iNumber > 05 > 0,继续循环
    • 将{5>添加到iTotal(此后为iTotal=5
    • 减少iNumber
  • 第二次循环迭代
    • 检查iNumber > 04 > 0,继续循环
    • 将{4>添加到iTotal(此后为iTotal=9
    • 减少iNumber
  • ...
  • 第五次循环迭代
    • 检查iNumber > 01 > 0,继续循环
    • iTotal之后添加1(此后为iTotal=15
    • 减少iNumber
  • 第六次循环迭代
    • 检查iNumber > 00 > 0false,因此突破循环

第二个循环也会发生类似的过程。