0

我为UVA-Problem 100编写了这段代码 ,它在 IDE 中工作得很好,但是提交时我得到了这个编译错误:

Main.java:5: 类 UVA100 是公共的,应该在一个名为 UVA100.java 的文件中声明 public class UVA100 { ^ 1 错误

我是java编程的新手,我不知道以uva接受的格式发送此代码。

import java.util.Scanner;

public class UVA100 {

    public static void main(String[] args) {
        int a, b, cnt, MAX, MIN, MaxCycle = 1;

        Scanner input = new Scanner(System.in);

        while(input.hasNextInt()){            

        a = input.nextInt();
        b = input.nextInt();

        MAX = Math.max(a, b);
        MIN = Math.min(a, b);

        for (int i = MIN; i <= MAX; i++) {
            cnt=CalculateCycle(i);
            if(cnt>MaxCycle)
                MaxCycle=cnt;
        }

        System.out.print(a + " " + b + " " + MaxCycle);
        }
    }

    public static int CalculateCycle(int n) {
        int count = 1;
        while (n > 1) {
            if (n % 2 == 0) {
                n = n / 2;
            } else {
                n = n * 3 + 1;
            }
            count++;
        }
        return count;
    }
} 
4

2 回答 2

4

我找到了答案:UVa 中的课程不得公开;-)

Java 规范:提交的 Java 程序必须在单个源代码(不是 .class)文件中。不过,您可以在此文件中添加任意数量的类。此文件中的所有类不得位于任何包中。

所有程序都必须从 Main 类中的静态 main 方法开始。

不要使用公共类:即使 Main 也必须是非公共的,以避免编译错误。

使用缓冲 I/O 以避免由于过度刷新而超出时间限制。

作为参考,我们提供了一个示例 Java 代码

于 2013-05-02T13:54:56.900 回答
0

应在以类名命名的文件中声明 java 类,无论它是否包含 main() 方法。

所以,你的班级应该被称为“UVA100.java”(因为你的班级被命名为UVA100)。

这是一个 javac(java 编译器)错误,在哪个 IDE 中起作用?

不想混淆这个问题(正如您所说的那样,您是新手),可以在 java 类中声明“内部类”,但类文件仍应以顶级类命名。

更新:在 OP 响应之后:

我想没有看到整个 Main.java 文件,很难进一步评论。但是,我猜您的课程包含两个顶级课程,如下所示:

public class Main {  //Top-level class Main
    ...
} 
public class UVA100 { //Top-level class UVA100 - not an inner class!
    ...
}

一般规则是文件名应该与文件中顶级类相同。也就是说,每个文件只有一个顶级类,并以它命名文件。遵循这条规则,你就不会出错(尽管我已经检查过JLS,但它实际上并不在那里,这令人惊讶)。请注意,您通常在日常开发中的文件中只有一个顶级类(在我看来)。

如果您愿意,可以进一步了解其中的复杂性:

  • 您必须只有一个顶级公共课程;
  • 你可以有多个顶级包私有类;
  • 您的顶级课程不能是私有的(如果没有人可以使用它有什么意义);
  • 它也不能被保护(只暴露给子类没有什么意义)。

确认使用:java HotSpot 版本“1.7.0_11”(64 位)

我警告所有这一切,因为它可能是编译器特定的细节,因为它没有在 JLS 中描述。

于 2013-04-17T10:27:46.233 回答