【发布时间】:2020-11-30 20:54:15
【问题描述】:
我只是在 Hackerrank 上练习,因为我对 Java 还是很陌生(我只熟悉 C 和 C++,使用最少的 Python/Matlab/C#)。基本上我们只需要从头开始编写下面的“Checker 类”。但是,我注意到当我将 public 添加到 Checker 类时,它会导致运行时错误。有谁知道为什么?我在网上找不到任何答案。
另外,是的,我知道访问修饰符限制了他们可以访问类范围的程度,但默认类如何无法访问公共类的方法对我来说没有意义。我假设可能是我正在实现导致问题的父类?这是我在 Hackerrank 上收到的 RE 消息:
Error: Main method not found in class Checker, please define the main method as:
public static void main(String[] args)
or a JavaFX application class must extend javafx.application.Application
如果有兴趣,链接练习题供参考:https://www.hackerrank.com/challenges/java-comparator/problem
import java.util.*;
// Write your Checker class here
class Checker implements Comparator<Player>{ //If I add "public" in front I get RE
@Override
public int compare(Player A, Player B){
if(A.score == B.score)
return A.name.compareTo(B.name);
else
return B.score - A.score;
// return A.compareTo(B);
}
}
class Player{
String name;
int score;
Player(String name, int score){
this.name = name;
this.score = score;
}
}
class Solution {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
Player[] player = new Player[n];
Checker checker = new Checker();
for(int i = 0; i < n; i++){
player[i] = new Player(scan.next(), scan.nextInt());
}
scan.close();
Arrays.sort(player, checker);
for(int i = 0; i < player.length; i++){
System.out.printf("%s %s\n", player[i].name, player[i].score);
}
}
}
【问题讨论】:
-
1.它与 X 无关,无法从 Y 访问。错误消息明确指出它与
main方法有关。 2. 这很可能是 Hackerrank 本身的问题 - 无论出于何种原因它试图运行您定义为入口点的任何公共类,它都需要在其中包含main。 -
@Amongalen 好吧,根据我在调试/错误消息方面的经验,很多时候当它们指代一个区域时,它实际上是指向消息所指区域所指向的另一个特定区域。无论如何,我将代码粘贴到 Eclipse 上并在我的“Checker 类”前面添加了 public,并且有一个错误说“必须在自己的文件中定义公共类型 Checker”。我做了它告诉我的事情,它工作了,我不知道为什么我必须在一个单独的文件中定义它?
-
您需要在自己的文件中声明公共类。这是对项目结构提出的要求之一。在 Java 中就是这样。
-
我对你的问题感到困惑。没有声明类
public,也没有子类化。 -
@daniu 我在第四行添加了一条评论,说如果我在前面添加 public 它会导致 RE。
标签: java class public implements