Metoda equals

0

Znalazłam problem którego sama nie mogę rozwiązać z internetem, otóż gdy wczytuję 2 wyrazy to później mogę wczytać jeszcze jeden wyraz, by użyć metody equals, ale gdy wczytuję 2 liczby to metoda equals przestaje działać, konsola nie chce pobierać danych i przeskakuje od razu do else, nie wiem co zrobić żeby to działało.



import java.util.Scanner;

public class Condition {

	public static void main(String[] args) {
		
		Scanner in = new Scanner(System.in);
		int data1,data2;
		
		
		System.out.println("wpisz liczbe ");
		data1 = in.nextInt();
		System.out.println("wpisz 2 liczbe");
		data2 = in.nextInt();
		
		
		
		System.out.println("Ktora liczbe chcesz wyswietlic (Pierwsza/Druga)");
		String input = in.nextLine();
		
		if (input.equals("Pierwsza"))
		{
			System.out.println(data1);
		}
		
		else if (input.equals("Drugia"))
		{
			System.out.println(data2);
		}
		
		else 
		{
			System.out.println("nie rozumiem");
		}
		

			
	}

}
1

Metoda nextInt() zostawia w buforze znak nowej linii "\n", który potem wczytuje się automatycznie do nextLine(). Po ostatnim nextInt() wywołaj metodę next() na obiekcie Scanner, która połknie ten znak.

6

a skąd takie coś wiedziałeś ?

1

Własne doświadczenie i myślenie, pomaga też lektura dokumentacji (https://docs.oracle.com/javase/8/docs/api/java/util/Scanner.html).
@tmk13 napisał

Metoda nextInt() zostawia w buforze znak nowej linii "\n"...Po ostatnim nextInt() wywołaj metodę next()...

To jest bardzo nieprecyzyjne, jeśli w czasie wykonywania kodu

        System.out.println("wpisz liczbe ");
        data1 = in.nextInt();

użytkownik wpisze 35 dzisiaj jest poniedzialek, to data1 przyjmie wartość 35 a w buforze klawiatury zostanie "dzisiaj jest poniedzialek\n", aby wyczyścić bufor trzeba wywołać metodę nextLine(), next() nie wystarczy.

0

Mam jeszcze dwa pytania odnośnie tego tematu:

  1. Nie ma innego sposobu ? Zawsze trzeba wywoływać nextLine po nextInt ? Sposób jest łatwy i prosty, ale nie wygląda elegancko

  2. A co jeśli chce wczytać jakąś liczbę z tekstem ? Książka z której się uczę ma opisane 4 metody, next(), nextLine(), nextInt() i nextDouble(), w google nic nie znalazłam, a w dokumentacji powinno być, tylko że też nie mogę znaleźć, ale muszę przyznać że cokolwiek ciężko znaleźć w tej dokumentacji.

1
  data1 = Integer.parseInt(in.next());

Tak możesz to załatwić :)

2

@wioletta90 dla własnego dobra naucz się korzystać z debuggera. Serio. Teraz. W tej chwili. Zostaw to czego się uczysz, opanuj debugger i dopiero wróc do nauki.

0
Promar napisał(a):
  data1 = Integer.parseInt(in.next());

Tak możesz to załatwić :)

Sprawdziłam i nie działa

1

Co to znaczy, że chcesz

razem wczytać liczbę i tekst
?
Twój program wypisuje Wpisz liczbe potem są instrukcje

data1 = Integer.parseInt(in.next());
System.out.println("Ktora liczbe chcesz wyswietlic (Pierwsza/Druga)");
String input = in.next();
  • jeśli użytkownik wpisze 35 nic nie umiem [ENTER], to data1 = 35, input = "nic"`,
  • jeśli wpisze 35nic nie umiem, to będzie błąd wykonania,
  • jeśli wpisze 35 [ENTER] nic nie umiem [ENTER], to data1 = 35, input = "nic"`.
    Zatem działa.
0

Chciałam żeby wczytał i wypisał zdanie, np. "Za 10 dni mam 20 urodziny." w całości

1

To użyj do wczytania metody nextLine().

0

Nie wiem jakim cudem wcześniej nie działało, pewnie nie zmieniłam typu zmiennej na String ...

Problem rozwiązany, ale z ciekawości zapytam jeszcze po co proponowaliście mi parseInt ? Przeczytałam że to zmienia łańcuch znaków na liczbę całkowitą, a okazuje się że nie jest to potrzebne.

0

Mam jeszcze dwa pytania odnośnie tego tematu:

  1. Nie ma innego sposobu ? Zawsze trzeba wywoływać nextLine po nextInt ? Sposób jest łatwy i prosty, ale nie wygląda elegancko

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