Java Setter с использованием пользовательского ввода - PullRequest
0 голосов
/ 06 июня 2018

Чтобы убедиться, что это не закрыто, прочитайте это.Это не дублирующее сообщение, потому что единственный другой пользовательский установщик ввода находится в C или c чем-то, и если нет, то это для совершенно другого приложения.Как я могу настроить свой метод setWord, чтобы использовать пользовательский ввод и не быть нулевым.Мой текущий код выделяет нулевой указатель, потому что переменная равна нулю, но я не могу найти подходящий способ установить его значение с помощью пользовательского ввода.Текущий код: Подкласс: пакетный палач;

public class Hangman {

private String word;

public void setWord(String word) {
    this.word = toString();
}

public String getWord() {
    return this.word;
}

@Override
public String toString() {
    System.out.println("Enter secret word: ");
    return (this.getWord());   
}

}

Main

public static void main(String[] args) {
Hangman hangman = new Hangman();
hangman.setWord();
String secretWord = hangman.getWord();
StringBuilder b = new StringBuilder(secretWord.length());
}

Опять же, проблема в том, что я не могу найти способ установить частную строку "word" для пользователявход без него в конечном итоге будет нулевым.Пожалуйста, не помечайте это как дубликат, я уже посмотрел общие нити cookie-резаков nullpointerexception, но мне это никак не помогло.Я застрял на этом, и это моя последняя часть моей программы.Нулевой указатель всегда находится в строителе строк, что говорит о том, что secretWord имеет значение null.

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

Изначально у меня была строка toString, которая не выполняла никаких функциональных целей.И для метода setWord требовался параметр, которого у меня не было, поэтому для его исправления я заменил код setWord на этот

 public void setWord() {
        Scanner scan = new Scanner(System.in);
        System.out.println("Enter the secret word: (Under 7 letters)");
        this.word = scan.nextLine();
        this.word = word; 
    }
0 голосов
/ 06 июня 2018

Подумайте об этом: где вы когда-либо задавали слово?setWord присваивает возврат toString, который возвращает результат getWord, но getWord просто возвращает то, что this.word уже было!Нигде вы никогда не устанавливаете слово, поэтому оно никогда не инициализируется!Вы просто устанавливаете this.word на то, что было изначально, что было null.Это вызывает NPE, когда вы звоните secretWord.length(), так как secretWord - это null.

У вас есть другая проблема, которая, как я предполагаю, является опечаткой здесь, когда ваш вызов setWord в вашемmain не приводится аргумент.Это недопустимо и создает собственную ошибку, поэтому оно никогда не должно достигать строки StringBuilder.

Измените setWord на:

public void setWord(String word) {
    this.word = word; ; Set it to its argument
}

Затем вызовите его со словом какаргумент:

hangman.setWord("Word");
...