Why does a semicolon after a for statement cause a compile error?

北慕城南 提交于 2020-01-16 00:25:32

问题


For my Java class, we are asked to add a semicolon to a working for statement and explain why the output is what it is. I don't understand why adding the semicolon creates an erroneous tree type error resulting in the code being unable to compile. Below the code is the output; I have also added backslashes to the any tag because it wasn't displaying otherwise. So, why does a semicolon after a for statement cause such an error? Thanks in advance.

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 + " ");
        }
    }
}

run:

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)

回答1:


You're teminating the for-loop with a ;...for (int n = 1; n <= number; n += 2); <--- See ; here, this means that the loop does nothing and then n becomes undefined, is it's defined only within the context of the for-loop itself...

Try something more like...

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



回答2:


I reformatted your code (whitespace changes only) to make it readable.

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 + " ");
        }
    }
}

The problem should be apparent now.

n is not in scope.




回答3:


Your for loop don't have a body

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

Then you call System.out.print(n + " ");, n is not visible here. Since you are call it from outside the scope of that variable

You can use as following

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



回答4:


When you terminate for loop with ;, it equavilent to

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

In fact, for loop should be

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


来源:https://stackoverflow.com/questions/25860661/why-does-a-semicolon-after-a-for-statement-cause-a-compile-error

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!