为什么for语句后面的分号会导致编译错误?

时间:2014-09-16 04:29:34

标签: java loops for-loop runtimeexception

对于我的Java类,我们被要求在一个work for语句中添加一个分号,并解释为什么输出就是这样。我不明白为什么添加分号会导致错误的树类型错误导致代码无法编译。代码下面是输出;我还在任何标签上添加了反斜杠,因为它没有显示。那么,为什么for语句后面的分号会导致这样的错误呢?提前谢谢。

package fordemo;

import java.util.Scanner;

public class ForDemo {
    public static void main(String[] args) {
        {
            Scanner user_input = new Scanner(System.in);
            System.out.println("Input a number:");
            int number = user_input.nextInt();
            for (int n = 1; n <= number; n += 2) ;
            System.out.print(n + " ");
        }
    }
}

生成

Input a number:

9

Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - 
Erroneous tree type: <\any>\

at fordemo.ForDemo.main(ForDemo.java:35)

Java Result: 1

BUILD SUCCESSFUL (total time: 1 second)

4 个答案:

答案 0 :(得分:2)

你正在使用for-loop ;for (int n = 1; n <= number; n += 2); ;&lt; ---看这里n,这意味着循环什么也没做,然后for-loop变得未定义,是否仅在for (int n = 1; n <= number; n+=2 ) { System.out.print(n + " "); } 本身的上下文中定义...

尝试更像......

{{1}}

答案 1 :(得分:0)

我重新格式化了您的代码(仅限空格更改)以使其可读。

package fordemo;

import java.util.Scanner;

public class ForDemo {

    public static void main(String[] args) {

        /* Question 2 */
        {
            Scanner user_input = new Scanner(System.in);
            System.out.println("Input a number:");
            int number = user_input.nextInt();
            for (int n = 1; n <= number; n+=2 );
            System.out.print(n + " ");
        }
    }
}

现在问题应该很明显了。

n不在范围内。

答案 2 :(得分:0)

你的for循环没有身体

for (int n = 1; n <= number; n+=2 ); // execute and exit and nothing do

然后您致电System.out.print(n + " ");,此处无法看到n。因为你是从那个变量的范围外调用它的

您可以使用以下

for (int n = 1; n <= number; n+=2 ) {
  System.out.print(n + " ");
} 

答案 3 :(得分:0)

使用for loop终止;时,相当于

for (int n = 1; n <= number; n+=2 ) {
     //do nothing
}
//here n is out of variable scope
System.out.print(n + " ");}

事实上,for loop应为

for (int n = 1; n <= number; n+=2 ) {
     System.out.print(n + " ");
}