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

时间:2014-11-04 11:47:51

标签: java

enter image description here我已经下载了大学课程所需的java文件。但是我觉得无法运行它。 Eclipse不会给我机会甚至运行它(只有ant build),如果我使用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

如果有人善于阅读代码,我真的不知道接下来该做什么。我认为主类必须有问题。谢谢!

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();
  }
}

3 个答案:

答案 0 :(得分:2)

例外说明你需要知道的一切。将类 FILE 重命名为Hangman.java。

Caused by: java.lang.RuntimeException: Uncompilable source code - class Hangman is public, should be declared in a file named Hangman.java

答案 1 :(得分:1)

您应该将下载的文件保存在Hangman.java中,而不是hangman.java(请参阅与您的类名相同的大写字母中的'H')。

答案 2 :(得分:1)

将班级更改为public class Hangman。它允许外部方法访问它。

编辑:我下载了文件,将课程更改为公共工作。我在代码本身也发现了一个问题,这个词总是&#34; Leverets&#34;。 要更改此设置,请修改getAnswer()方法并将其更改为

private int getAnswer() {

    int i = (int) (Math.random() * 6) + 0;
    return i;
}