Pracuję nad kodem, który zapobiegnie łańcuchowi od duplikacji duplikatów, zapobieganie wyświetlaniu 2 tej samej litery. Obecnie kod jest w stanie wykryć duplikat list, jednak wyświetla tylko po drugim prasie. Na przykład naciskam "Q" i nic się nie dzieje. Ponownie naciskam "Q", a teraz aktualizacje ciągu z Q. Chcę, aby wyświetlić q zaraz po pierwszym zgadywania.

Kod:

public void keyPressed(KeyEvent e) {
    keyChar = e.getKeyChar();
    String guessedLetters = buffer.toString();

        statusMsg.setText(model.guessNotification());

    if(guessedLetters.contains(Character.valueOf(keyChar).toString()))  {
        guessedLetters = buffer.toString();
    }
    else{
        buffer.append(keyChar);
    }
}   
1
noobcoder 15 luty 2017, 23:01

2 odpowiedzi

Najlepsza odpowiedź

Nie przypisujesz ponownie guessedLetters po dołączeniu listu do bufora.

(Nie musisz także ponownie przypisać guessedLetters w bloku if, ponieważ bufor nie zmienił się od pierwszego zadania. Ale to nie jest przyczyna problemu.)

(Również, jak wskazali inni, kolekcja byłaby lepszym podejściem niż stringbuffer. Ale nadal musisz przekonwertować zawartość kolekcji do ciągów na wyświetlaczu, a nadal będziesz musiał to pamiętać po dodanie elementu do kolekcji.)

0
Dave Costa 15 luty 2017, 20:09

Zasadniczo, chcesz zacząć od Set wszystkich możliwych domysłów, które użytkownik mógłby zrobić. Następnie po zgabrzeniu sprawdź, czy zestaw zawiera zgadywanie (tj. To jego ważne), a następnie usunąć, co zgadnij z zestawu.

0
ControlAltDel 15 luty 2017, 20:06