当前位置: 首页 > 知识库问答 >
问题:

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

孔皓
2023-03-14

对于我的Java类,要求我们在working For语句中添加分号,并解释为什么输出是这样的。我不明白为什么添加分号会产生错误的树类型错误,导致代码无法编译。代码下面是输出;我还向any标记添加了反斜杠,因为它不会以其他方式显示。那么,为什么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)

共有3个答案

甄鹏云
2023-03-14

你的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 + " ");
} 
邵阳辉
2023-03-14

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

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不在范围内。

左丘峰
2023-03-14

您正在使用临时设置for循环...for(int n=1; n

尝试更像。。。

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

 类似资料:
  • 问题内容: 遇到一个错误地使用 而不是 在其代码中的人,它没有显示为编译错误。 是因为 是相同的 ? 问题答案: 没有编译错误,因为它是有效的(尽管相当无用) 一元运算符 ,其使用方式与以下方式相同: Java语言规范中的相关部分是Unary Plus运算符+(第15.15.3节) 。它指定调用一元运算会导致操作数的一元数值提升(第5.6.1节)。这意味着: * 如果操作数是编译时类型的,,,或,

  • 我想遍历选项的列表。如果其中有一个值,我想返回一个错误。下面是一个人为的例子: 添加另一个分号会导致错误,但删除分号不会导致错误。 为什么return语句后面的分号是可选的? 习惯用法Rust应该使用哪种形式:分号还是不使用分号?这两种方法都被编译器接受,并且似乎产生相同的结果。

  • 问题内容: 我经常在调试程序时发现在代码块中插入return语句很方便(尽管可能是不好的做法)。我可能会在Java中尝试类似的方法.... 当然,这会产生编译器错误。 Test.java:7:无法访问的语句 我能理解为什么警告是合理的,因为有未使用的代码是不好的做法。但是我不明白为什么这需要产生一个错误。 这只是Java试图成为一个保姆,还是有充分的理由使它成为编译器错误? 问题答案: 因为无法到

  • 根据SQL字符串组合文档,我想在postgresql数据库中执行DELETE语句: 这将导致以下错误: 另一方面,类似的execute工作正常: 我真的看不出有什么区别...

  • 我尝试在编译器中运行此代码,它给出了“circle”的输出: 我没有将打印功能设置为虚拟,但它仍然具有相同的效果。这有什么原因吗?

  • 我使用比较器对流进行排序,遇到了一个我不理解的编译器错误。 假设我有以下课程: 我正在创建两个比较器,以按日期对s进行排序,一个按自然顺序,另一个按相反顺序。编译以下代码: 意识到是在上定义的,我想我会尝试以下操作: (对我来说)令人惊讶的是,rev2的代码编译正常,而rev1的代码产生以下错误: 为什么我会收到这些编译器错误?为什么我可以在从构建时有效地规避它们? (如果相关的话,我正在使用Ec