【问题标题】:java for loop not workingjava for循环不工作
【发布时间】:2011-06-02 05:18:30
【问题描述】:

我希望这不是一个愚蠢的问题,但我已经查找了我能找到的每个示例,但似乎我的代码仍然正确,但它仍然无法正常工作......我输入一个数字,它继续前进到下一行代码而不是循环。我正在使用它来填充用户输入数字的数组。感谢您的帮助,谢谢。

for(i=0; i<9; i++);
{  
    System.out.println ("Please enter a number:");  
    Num[i] = keyboard.nextDouble();  
    Sum += Num[i];      
    Product *= Num[i];      
}   

【问题讨论】:

  • 这甚至不应该编译。 i 未声明。除非您在顶部某处全局声明了 i
  • 按照这个道理,NumkeyboardSumProduct 都不是。
  • 您应该选择一个问题的答案。

标签: java syntax for-loop iteration


【解决方案1】:

只需删除“for(....)”后的分号

for(i=0; i<9; i++); //<---------- over here

您不必在此处添加分号。很可能您已经意识到这一点,它发生了。 附加点: “for”的语法是:

for(initializer; condition; change){
//code here
}

“while”的语法是:

while(condition without semi-colon){
//code here
}

“do-while”的语法是:

do{
//code here
}while(condition);//<---------------semi-colon here.

您很可能对“for”和“do-while”循环感到困惑,这种情况发生了。我也是,当我还是初学者的时候,曾经对这些事情感到困惑。

【讨论】:

    【解决方案2】:

    只是为了让你知道。像这样:

    for(;;)
      ;
    

    应该让你的程序进入忙等待状态。早期发生在我身上。 :)

    【讨论】:

      【解决方案3】:

      已经给出了答案,但我想补充一点,如果您使用的是 IDE*,可能会针对这些类型的空语句和其他容易制作、容易忽略的错误类型发出警告(例如,在条件下进行比较而不是比较)。

      【讨论】:

        【解决方案4】:

        for 循环末尾的; 被视为一个空语句,相当于 for 循环的一个空块。编译器将您的代码读取为:

        int i;
        ....
        for(i=0; i<9; i++)
            /* no-op */;
        
        /* inline block with no relation to for-loop */
        {  
            System.out.println ("Please enter a number:");  
            Num[i] = keyboard.nextDouble();  
            Sum += Num[i];      
            Product *= Num[i];      
        } 
        

        删除; 以获得您的预期行为。


        如果您不需要循环外的i,您可以将其声明移到for 语句中。

        for(int i=0; i<9; i++)
        {
           // `i` is only usable here now
        }
        // `i` is now out of scope and not usable
        

        在出现错误的分号; 时使用此语法会产生一个编译错误,该错误会提醒您注意错误的;。编译器会看到:

        for(int i=0; i<9; i++)
            /* no-op */;
        
        /* inline block with no relation to for-loop */
        {  
            System.out.println ("Please enter a number:");  
            Num[i] = keyboard.nextDouble();     // compile error now - `i` is out-of-scope
            Sum += Num[i];      
            Product *= Num[i];      
        } 
        

        这将是一个示例,说明在可能的情况下限制变量的范围是一种很好的做法。

        【讨论】:

        • 哇,我知道这将是一件愚蠢的事情...... arrrrgh。不过非常感谢!!它现在按预期工作:)
        【解决方案5】:

        为避免以后出现这种错误,您应该始终在 for 循环中使用新变量。而不是:

        for (i = 0; ...
        

        for (int i = 0; ...
        

        这样会出现编译时错误,因为变量 i 不在下一个块的范围内。

        【讨论】:

        • 虽然我会推荐你​​的策略,但我看不出这将如何避免史蒂夫的这个错误
        • 在代码 for (int i = 0; i &lt; 5; i++); { i++; } 中,标识符 i 在分号之后和块之前超出范围。
        • 这会降低出错的可能性,因为我将被限制在 for 循环中。现在 Num[i] 在下面的块中它可以工作,因为 i 显然已经在它之前定义了,但是否则会出现编译错误,程序员会更容易实现复合语句(块)和 for 循环是分开的。跨度>
        【解决方案6】:

        第一行的末尾不应有分号。它表明你的循环是空的。

        【讨论】:

          【解决方案7】:

          从for循环行中删除最后一个字符分号............

          【讨论】:

            【解决方案8】:

            注意到';'在 for(i=0; i

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2015-04-08
              • 1970-01-01
              • 2013-12-25
              • 1970-01-01
              • 1970-01-01
              • 2015-02-03
              • 1970-01-01
              • 2022-01-03
              相关资源
              最近更新 更多