problem ze scannerem w Java

0

Dlaczego nie pozwala mi przypisać wartości do zmiennej 'operator' tylko Od razu po wpisaniu dwóch liczb wywala mi default komunikat ze switch'a?

	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		
		int value1, value2 = 0;
		String operator;
		int answer;
		
		
		System.out.println("Enter first number: ");
		value1 = scanner.nextInt();
		System.out.println("Enter second number: ");
		value2 = scanner.nextInt();
		System.out.println("Select arithmetic operation: * / + -");
		operator = scanner.nextLine();
		
		switch(operator){
			case "+":
				answer = value1 + value2;
				System.out.println(answer);
				break;
				
			case "-":
				answer = value1 - value2;
				System.out.println(answer);
				break;
				
			default:
				System.out.println("Operator not recognized.");
		}

		
	}
0

Użyj scanner.next() zamiast zamiast scanner.nextLine();
Ewentualnie zrób coś takiego:

 scanner.nextLine();
    System.out.println("Select arithmetic operation: * / + -");
    operator = scanner.nextLine();

Wygląda na to że scanner trzyma w buforze znak nowej lini po wczytaniu inta ;)

2

Co prawda uczę Javy dopiero od tygodnia, ale już "wyniuchałem" ten bug w klasie Scanner. Po prostu w czasie pobierania strumienia liczb odczytuje znaki do chwili, aż trafi na znak niebędący cyfrą. nextLine() łapie \n zaraz w strumieniu za ostatnią cyfrą i zwraca pusty łańcuch znakowy. Powinno się wtedy dodawać dodatkowe wywołanie nextLine() po nextInt(). Dokładnie to jest opisane w "Think Java: How to Think Like a Computer Scientist.

0

Dzięki za odpowiedź, teraz to ma sens.

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