无法运行*.java下载的文件
我下载了一个大学课程所需的java文件。然而,我发现运行它是不可能的。Eclipse甚至不会给我运行它的机会(只有ant构建),如果我使用netbeans,我会遇到以下异常:无法运行*.java下载的文件,java,Java,我下载了一个大学课程所需的java文件。然而,我发现运行它是不可能的。Eclipse甚至不会给我运行它的机会(只有ant构建),如果我使用netbeans,我会遇到以下异常: Exception in thread "main" java.lang.ExceptionInInitializerError Caused by: java.lang.RuntimeException: Uncompilable source code - class Hangman is public, should
Exception in thread "main"
java.lang.ExceptionInInitializerError
Caused by: java.lang.RuntimeException: Uncompilable source code - class Hangman is public, should be declared in a file named Hangman.java
at Hangman. < clinit > (hangman(Case Conflict).java: 20)
Java Result: 1
线程“main”中出现异常
java.lang.ExceptionInInitializeError
引起:java.lang.RuntimeException:不可编译源代码-类Hangman是公共的,应在名为Hangman.java的文件中声明
在绞刑架克林尼特>(刽子手(案例冲突).java:20)
Java结果:1
如果有人愿意通读代码,我真的不知道下一步该怎么办。我想主课一定出了点问题。谢谢
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;
class Hangman {
Scanner userInput;
private Set < Character > wrongGuesses;
private String[] answers = {
"leverets", "hatchlings", "puppies",
"kittens", "pullets", "goslings"
};
private String answer;
private String guessed;
private int maxTurns;
private int currentTurns;
private boolean inProgress;
private char nextGuess;
private boolean gameWin;
public Hangman() {
userInput = new Scanner(System.in);
wrongGuesses = new HashSet < Character > ();
inProgress = false;
gameWin = false;
maxTurns = 14;
currentTurns = 0;
// set answer somehow
answer = answers[0];
// set guessed to the correct number of dashes
StringBuilder sb = new StringBuilder();
for (int i = 0; i < answer.length(); i++) {
sb.append('-');
}
guessed = sb.toString();
}
/* start a new game */
public void startGame() {
inProgress = true;
startGameLoop();
}
/* the game loop. this method is the heart of the game */
private void startGameLoop() {
printInstructions();
while (inProgress) {
printStatus();
acceptGuess();
checkStatus();
}
printWinOrLose();
}
private void printInstructions() {
System.out
.println("Guess the word one letter at a time until you win or run out of turns. Good luck!");
}
private void printWinOrLose() {
if (gameWin) {
System.out.println("You win! The answer was " + answer);
} else {
System.out.println("You lose.");
}
}
private void printStatus() {
System.out.println("Guesses left: " + (maxTurns - currentTurns));
System.out.println("Current status: " + guessed);
System.out.println("Wrong guesses: " + getWrongAnswers());
}
/* get the next character from the player */
private void acceptGuess() {
System.out.println("Next guess: ");
String temp = userInput.next();
nextGuess = temp.charAt(0);
}
/* check what state the game is in */
private void checkStatus() {
// if already guessed, say already guessed.
if (wrongGuesses.contains(nextGuess)) {
System.out.println("You already guessed that!");
return;
}
// if guess is not in answer, update number of turns played and add
// guess to wrong guesses
// otherwise update the guessed variable
if (answer.indexOf(nextGuess) < 0) {
++currentTurns;
wrongGuesses.add(nextGuess);
} else {
updateGuessStatus();
}
// check to see if the player has won or lost
if (answer.equals(guessed)) {
gameWin = true;
inProgress = false;
}
if (currentTurns == maxTurns) {
inProgress = false;
}
}
/* update the guessed variable when there is a correct guess made */
private void updateGuessStatus() {
// replace - with nextGuess where appropriate
int index = answer.indexOf(nextGuess);
int lastIndex = answer.lastIndexOf(nextGuess);
StringBuilder sb = new StringBuilder(guessed);
if (index != lastIndex) { // more than one instance of the guess in the
// answer
// swap out in a loop
while (index != -1) {
sb.setCharAt(index, nextGuess);
int i = answer.indexOf(nextGuess, (index + 1));
index = i;
}
} else { // letter only appears once
// swap out just that one
sb.setCharAt(index, nextGuess);
}
guessed = sb.toString();
}
/* build a text representation of all the incorrect guesses */
private String getWrongAnswers() {
if (wrongGuesses.size() > 0) {
StringBuilder sb = new StringBuilder();
sb.append('(');
for (Character c: wrongGuesses) {
sb.append(c + ",");
}
sb.deleteCharAt(sb.length() - 1); // delete trailing comma
sb.append(')');
return sb.toString();
} else {
return "<none>";
}
}
public static void main(String[] args) {
Hangman h = new Hangman();
h.startGame();
}
}
import java.util.HashSet;
导入java.util.Scanner;
导入java.util.Set;
阶级刽子手{
扫描仪用户输入;
私人设置<字符>错误猜测;
私有字符串[]答案={
“杠杆”、“幼体”、“小狗”,
“小猫”、“小母鸡”、“小鹅”
};
私有字符串应答;
私人字符串猜测;
私有整数最大化;
私家车;
私有布尔进程;
私有字符nextGuess;
私有布尔gameWin;
公众刽子手(){
用户输入=新扫描仪(System.in);
错误猜测=新HashSet();
inProgress=假;
gameWin=false;
最大匝数=14;
电流匝数=0;
//以某种方式设定答案
答案=答案[0];
//将“猜测”设置为正确的破折号数
StringBuilder sb=新的StringBuilder();
for(int i=0;i0){
StringBuilder sb=新的StringBuilder();
某人附加(“(”);
for(字符c:错误猜测){
sb.附加(c+“,”);
}
sb.deleteCharAt(sb.length()-1);//删除尾随逗号
某人附加(');
使某人返回字符串();
}否则{
返回“”;
}
}
公共静态void main(字符串[]args){
刽子手h=新刽子手();
h、 startGame();
}
}
例外说明了您需要知道的一切。将类文件重命名为Hangman.java
Caused by: java.lang.RuntimeException: Uncompilable source code - class Hangman is public, should be declared in a file named Hangman.java
您应该将下载的文件保存在Hangman.java中,而不是Hangman.java中(请参见,它需要大写字母“H”作为类名) 将该类更改为
公共类刽子手
。它允许外部方法访问它
编辑:我下载了这个文件,将类更改为public。我还发现代码本身存在一个问题,这个词总是“Leverets”。
要更改此选项,请编辑getAnswer()
方法并将其更改为
private int getAnswer() {
int i = (int) (Math.random() * 6) + 0;
return i;
}
您应该将下载的文件保存在Hangman.Java中。请不要像添加Javascript代码片段一样添加Java代码,事实并非如此。至于代码出了什么问题,请查看编译时错误。(它们存在是有原因的,当您试图运行无法编译的代码时,您应该收到警告。)@eneko可能会尝试公开该类。该类当前没有修饰符,因此范围现在是package。构造函数在公共范围内。可能是这导致了您的问题。@eneko您正在运行什么
javac
命令?我怀疑它从另一个文件中获取了另一个代码副本,然后…我无法解决这个问题,我附上了文件:我无法查看它