Eclipse отвергает мой публичный метод void init - PullRequest
0 голосов
/ 17 февраля 2012

Eclipse SDK v3.2.1 отклоняет мой публичный void init метод.
Я использую следующий импорт:

import acm.graphics.*;
import acm.program.*;
import acm.util.*;

В моей программе есть метод run () и метод init (), но init () вызывает эти ошибки

- overrides acm.program.Program.init
- Cannot override the final method from Program

Обратите внимание, это еще не отдельное приложение. Просто запустил его из редактора Eclipse.

По-видимому, в библиотеке acm.program есть метод init. Как мне реализовать свой собственный метод инициализации, не пытаясь переопределить встроенный метод acm.program? Я пытался сделать мой метод init приватным с private void init , но затем я получил:

- Cannot reduce the visibility of the inherited method from Program
- Cannot override the final method from Program 

Вот код на данный момент. Ошибка с init ().

public class Hangman extends GraphicsProgram {

    //CONSTANTS
private static int NUMBER_OF_INCORRECT_GUESSES = 8;


//Initialize the program
public void init() { //this gives compiler a problem
HangmanCanvas canvas = new HangmanCanvas();
add(canvas);
}



public void run() {

/ * Когда пользователь играет в Hangman, компьютер сначала выбирает секретное слово в случайным образом из списка, встроенного в программу. Затем программа распечатывает ряд черточек - один для каждой буквы в секретном слове - и просит пользователя угадать букву. Если пользователь угадает буква, которая находится в слове, слово отображается заново со всеми экземплярами этой буквы показаны в правильных положениях, вместе с любыми буквами, правильно угаданными на предыдущих ходах. Если буква не появляется в слове, пользователь обвиняется в неправильном предположении. Пользователь продолжает угадывать буквы, пока либо (1) пользователь не угадал все буквы в слове или (2) пользователь сделал восемь неверных догадок. * /

HangmanLexicon lexicon = new HangmanLexicon();
RandomGenerator rgen = new RandomGenerator();
int wordIndex = rgen.nextInt(0, lexicon.getWordCount()-1);

    while (true) { //allows multi-play
        int play = 0;
        String answer = readLine ("Want to play?");
        if(answer.equals("Y") || answer.equals("y") || answer.equals("yes") || answer.equals("Yes")) {play = 1;}
        if(play == 0) {break;}
        //Initialize some stuff
        //get new random word
        secretWord = lexicon.getWord(rgen.nextInt(0,wordIndex));
        println("Welcome to Hangman.");
        secretWord = secretWord.toUpperCase(); // convert secret word to upper case
        int length = secretWord.length();
        //reset game variables
        String guess = "";
        //clear the canvas
        canvas.reset();
        //reset the wrong answer count
        wrong = 0;

// создаем пустое слово состояния

        currentWord = ""; //reset the word for multi-play

// строим тире в статусном слове до секретного слова.

        for (int i = 0; i < length; i++) {
            currentWord += "-";
        }
        println("The word looks like this  " + currentWord);

        while (wrong<NUMBER_OF_INCORRECT_GUESSES && !currentWord.equals(secretWord)) {
            guess = ".";
            char g = guess.charAt(0);
            while (!Character.isLetter(g)){ //if input is not a character, keep asking
                guess = readLine("Guess a letter: ");
                guess = guess.toUpperCase();
                g = guess.charAt(0);
                if (!Character.isLetter(g)){println("Your guess is not a single letter. Guess again: ");}
            }
            if(secretWord.indexOf(guess) < 0) {/*if guess is not in the secret word, increment wrong answer count and print message
             to that effect. */
                wrong++;
                println("Threre are no " + guess + "\'s in the word.");
                println("You have " + (NUMBER_OF_INCORRECT_GUESSES - wrong)  + " guesses left.");
            }
            else {
                println("That guess is correct.");
                currentWord = wordBuild(guess);
                if (currentWord.equals(secretWord)) { //if win print win but don't bother with the update to display
                    println("You win! You guessed the word: " + secretWord);}

                    else {  println("The word now looks like this  " + currentWord); //print the updated dash word
                    println("You have " + (NUMBER_OF_INCORRECT_GUESSES - wrong)  + " guesses left.");
                    }           
            }
        }

    if(!currentWord.equals(secretWord)) {println("You lose.");}   //out of guesses and  word is not good.
    }
}

// Построить и / или обновить тире слово ------ отображается

    public String wordBuild(String guess) {
        String dashWord = "";
        for (int i = 0; i < secretWord.length(); i++) {
                if(secretWord.charAt(i) == guess.charAt(0)) { 
                dashWord = dashWord + guess;
                }
                    else {dashWord = dashWord + currentWord.charAt(i);
                }
        }
            return dashWord;

    }



//INSTANCE VARS

int wrong = 0;  
String currentWord = "";
String secretWord = "";     
private HangmanCanvas canvas;

} //end of class

1 Ответ

0 голосов
/ 04 мая 2013

Полагаю, вы проходите курс Stanford CS106A , и это вызывает последнюю проблему инициализации. Проблема в том, что Karel.jar библиотека, которую вы должны были импортировать во время первых нескольких лекций. Я полагаю, что библиотека имеет метод init () в качестве окончательного, и это является основной причиной. Поэтому простое решение - удалить Karel.jar из справочной библиотеки как:

  1. В проводнике пакетов выберите Справочные библиотеки .
  2. Щелкните правой кнопкой мыши Karel.jar .
  3. Выберите Путь сборки из контекстного меню.
  4. Выберите Удалить из пути сборки .

Но в случае, если вам необходимо снова выполнить программирование Karel с помощью Eclipse, вам придется снова импортировать справочную библиотеку из пакета заданий 1, следуя аналогичному курсу, но выбрав импорт библиотеки. Чтобы убедиться, что вы продолжаете использовать методы acm, пожалуйста, импортируйте acm.jar, загрузив его с jtf.acm.org . Чтобы добавить библиотеки, используйте Документация Eclipse или просто Google it.

...