java.util.scanner wird übersprungen

fehmelchen

Mitglied
Hallo!

Ich bin relativ neu auf dem Gebiet Java, allerdings nicht ganz so neu beim Programmieren insgesamt. Bisher dachte ich, dass in einer Methode jede Zeile ausgeführt und bearbeitet wird. Ich habe zur Probe einen kleinen Code geschrieben, der zum Schluss die Frage stellt, ob man noch einmal möchte, oder aufhören möchte. Dazu soll ein String eingelesen und ausgewertet werden. Beim ausführen komme ich nicht zur String-Eingabe und das Programm startet einfach wieder neu. Hat jemand eine Idee, woran es liegen könnte? Ich benutze Eclipse Indigo unter Windows 7 in einem 64-Bit System.

Java:
                System.out.println("Möchten Sie das Programm beenden? (ja/nein)");
		beenden = scanner.nextLine();
		if (beenden.equals("ja") || beenden.equals("Ja"))
			schleife++;
 
also der Schnipsel ist jetzt imho nicht gerade signifikant. Da wird nur bei Ja oder ja
Code:
schleife
inkrementiert. Post mal mehr Code..
 
Java:
package uebungsblatt3;

import java.util.Scanner;

public class Rechner {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		System.out.println("Willkommen beim Taschenrechner!\n");
		
		int schleife = 0;
		int zahl1 = 0;
		int zahl2 = 0;
		double zahl3 = 0.0;
		String beenden = "";
		
		
		while (schleife == 0){
		System.out.println("Welche Operation möchten sie durchführen? Bitte die jeweilige Zahl eingeben!\n" +
				"1  |  Addieren\n" +
				"2  |  Subtrahieren\n" +
				"3  |  Multiplizieren\n" +
				"4  |  Dividieren\n" +
				"5  |  Fakultät rechnen\n" +
				"6  |  Potenzieren\n" +
				"7  |  Wurzel ziehen\n");
		
		int eingabe = scanner.nextInt();
		switch (eingabe){
		case 1 : 	System.out.println("Zahl 1: ");
					zahl1 = scanner.nextInt();
					System.out.println("Zahl 2: ");
					zahl2 = scanner.nextInt();
					zahl1 = zahl1 + zahl2;
					System.out.println("Das Ergebnis der Addition lautet: "+ zahl1);break;
		case 2:		System.out.println("Zahl 1: ");
					zahl1 = scanner.nextInt();
					System.out.println("Zahl 2: ");
					zahl2 = scanner.nextInt();
					zahl1 = zahl1 - zahl2;
					System.out.println("Das Ergebnis der Subtraktion lautet: "+ zahl1);break;
		case 3:		System.out.println("Zahl 1: ");
					zahl1 = scanner.nextInt();
					System.out.println("Zahl 2: ");
					zahl2 = scanner.nextInt();
					zahl1 = zahl1 * zahl2;
					System.out.println("Das Ergebnis der Multiplikation lautet: "+ zahl1);break;
		case 4:		System.out.println("Zahl 1: ");
					zahl1 = scanner.nextInt();
					System.out.println("Zahl 2: ");
					zahl2 = scanner.nextInt();
					zahl1 = zahl1 / zahl2;
					System.out.println("Das Ergebnis der Division lautet: "+ zahl1);break;
		case 5:		System.out.println("Zahl: ");
					zahl1 = scanner.nextInt();
					zahl1 = fak(zahl1);
					System.out.println("Das Ergebnis der Fakultät lautet: "+ zahl1);break;
		case 6:		System.out.println("Basis: ");
					zahl1 = scanner.nextInt();
					System.out.println("Potenz: ");
					zahl2 = scanner.nextInt();
					zahl1 = pot(zahl1,zahl2);
					System.out.println("Das Ergebnis der Potenzierung lautet: " + zahl1);break;
		case 7:		System.out.println("Zahl: ");
					zahl3 = scanner.nextInt();
					zahl3 = Math.sqrt(zahl1);
					System.out.println("Das Ergebnis des Wurzelziehen lautet: " + zahl1);break;
		}
		
		System.out.println("Möchten Sie das Programm beenden? (ja/nein)");
		beenden = scanner.nextLine();
		if (beenden.equals("ja") || beenden.equals("Ja"))
			schleife++;
		}
	}

Es geht dabei um ein Übungsblatt aus der aktuellen Vorlseung bei mir. Ein Taschenrechner ... Alle Methoden, die jetzt hier nicht aufgelistet sind (z.B. pot()) funktionieren
 
das Programm startet doch gewiss nicht wieder neu, etwa mit Menü,
sondern es kommt z.B. nach Addition wieder eine Eingabe "Zahl 1: ", oder?

das verwundert dich so sehr, obwohl doch [c] System.out.println("Zahl 1: ");[/c] direkt die erste nächste Codezeile nach der Addition ist?
das ganze switch nicht zu posten ist schon gemein 😉

dein Fehler ist ein fehlendes break; zwischen den cases, in Java wird dann das nächste case auch ausgeführt
 
Wo genau fehlt das break;? Ich zähle nach jedem case eins. Außerdem wird wie gewünscht die Rechenoperation durchgeführt und danach die Frage gestellt, ob ich das Programm beenden möchte. Allerdings wird dann auf keine Antwort durch den Benutzer gewartet, sondern weiter gemacht
 
das Programm startet doch gewiss nicht wieder neu, etwa mit Menü,
sondern es kommt z.B. nach Addition wieder eine Eingabe "Zahl 1: ", oder?

das verwundert dich so sehr, obwohl doch [c] System.out.println("Zahl 1: ");[/c] direkt die erste nächste Codezeile nach der Addition ist?
das ganze switch nicht zu posten ist schon gemein 😉

dein Fehler ist ein fehlendes break; zwischen den cases, in Java wird dann das nächste case auch ausgeführt

Da stehen breaks; allerdings nicht in einer eigenen Zeile und daher schlecht zu sehen.
Mach es mal so:
Java:
        scanner.nextLine();
        System.out.println("Möchten Sie das Programm beenden? (ja/nein)");
        beenden = scanner.nextLine();
        if (beenden.equals("ja") || beenden.equals("Ja"))
            schleife++;
        }

Dadurch wird der Eingabestrom noch geleert. Es kann vorkommen, dass da noch was steht was halt bei
Code:
beenden = scanner.nextLine();
eingelesen wird und das nicht beabsichtigt ist.
 
ich würde Eingabeaufforderungen in einer Methode auslagern. Dann kannst du deine Schleife z.B. so aufbauen:

Java:
import java.util.Scanner;

public class Test {
	
	private static Scanner scn = new Scanner(System.in);
	
	public static void main(String[] args) {		
		while (!readString("Möchten Sie das Programm beenden? (ja/nein)").equalsIgnoreCase("ja")) {
			System.out.println("do sth....");
		}
	}
	
	private static String readString(String prompt) {
		System.out.println(prompt);
		return scn.next();
	}
	
	// readInt
}
 

Zurück
Oben