无法运行*.java下载的文件

无法运行*.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

我下载了一个大学课程所需的java文件。然而,我发现运行它是不可能的。Eclipse甚至不会给我运行它的机会(只有ant构建),如果我使用netbeans,我会遇到以下异常:

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
命令?我怀疑它从另一个文件中获取了另一个代码副本,然后…我无法解决这个问题,我附上了文件:我无法查看它