Odczyt z JTextField - string i int

0

Próbuję napisać programik do prostej "rozmowy" dziecka z komputerem, typu: Jak masz na imię?; Ile masz lat?; Jak ma na imię Twoja siostra? Komputer ma odpowiadać, uwzględniając odpowiedzi dziecka. Gdy odpowiedzi dziecka wpisywane są słownie, program działa dobrze, ale mam problem, gdy odpowiedź ma być wpisana cyframi. Po zastosowaniu parseInt, słowna odpowiedź na kolejne pytanie nadal traktowana jest jak cyfry. Jak mogę spowodować, aby z powrotem była traktowana jak String?

0

Wyczyść bufor, twoje cyferki wciąż zalegają na wejściu.

0
try{
            int number = Integer.parseInt(userAnswer);
            //działaj z number
        } catch(NumberFormatException ex){
            //rób coś z userAnswer
        }
0

Słabo się na tym znam, ale nie tworzyłem bufora. Stosując try-catch, chyba też się nie uda, gdy będą przeplatać się odpowiedzi cyfrowe i słowne.
Poniżej wstawiam przykładowy, uproszczony kod, pokazujący w jaki sposób próbowałem napisać programik. Domyślam się, że tak prosto się nie da. Dlaczego po zastosowaniu parseInt, kolejne odpowiedzi (słowne) nadal traktowane są jak cyfrowe?

		Pole_1.setText("Jak masz na imię?");				
	}

	public static void main(String[] args)
	{
		Rozmowa_1 aplikacja = new Rozmowa_1();
		aplikacja.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		aplikacja.setVisible(true);
	}
	@Override
	public void actionPerformed(ActionEvent e)
	{
	   String pytania = Pole_1.getText();
	   String odpowiedzi = Pole_2.getText();
  
	   if (pytania.equals("Jak masz na imię?") & odpowiedzi.equalsIgnoreCase("Ola"))
	   {
		   Pole_1.setText("Cześć Ola!  Ile masz lat?");
		   Pole_2.setText("");
	   }
  	   
	   else if (pytania.equals("Cześć Ola! Ile masz lat?") & Integer.parseInt(odpowiedzi) == 10)
	   {
		   Pole_1.setText("10 lat... To pewnie chodzisz do czwartej klasy. \nLubisz matematykę?");
		   Pole_2.setText("");
	   }
	      
	   else if (pytania.equals("10 lat... To pewnie chodzisz do czwartej klasy. \nLubisz matematykę?") & odpowiedzi.equalsIgnoreCase("Tak"))
	   {
		   Pole_1.setText("To mam dla Ciebie zadanie. Ile to będzie: 8 x 9?");
		   Pole_2.setText("");
	   }
	}
0

http://stackoverflow.com/questions/5564410/difference-between-and

W skrócie, zawsze dochodzi Ci do sprawdzania warunku z parsowaniem, używaj &&.

0

Jeżeli dobrze Cie zrozumiałem to masz problem, gdyż Ola :) może odpowiedzieć np. "10" lub "dziesięć"? Jeżeli tak to najprościej blok try catch, który dałem Ci wyżej ubierz w metodę zwracającą boolean i dodaj ją do warunku zamiast parsowania.

public boolean isAnswerValid(String userAnswer) {
        try {
            int number = Integer.parseInt(userAnswer);
            return number == 10;
        } catch (NumberFormatException ex) {
            return userAnswer.equalsIgnoreCase("dziesięć");
        }
}

i warunek

else if (pytania.equals("Cześć Ola! Ile masz lat?") && isAnswerValid(odpowiedzi )) {
           //
}

A tak w ogóle to masz spację o jedną za mało w drugim warunku "Cześć Ola! Ile masz lat" :)

0

Dzięki. Wystarczyło użycie &&.
garai, zakładałem że liczby będą wpisywane cyframi, ale Twoja podpowiedź też mi się przyda, gdy rozbuduję programik.
Po wklejeniu kodu coś jeszcze zmieniałem i stąd ta dodatkowa spacja, w oryginale miałem OK - spostrzegawczy jesteś. :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1