While-Schleife und Scanner enden nicht?

jopeter58

Mitglied
Hallo,
ich bin zu Zeit in einem Java Einsteigerkurs angemeldet. Und wie sagt man so schön: "Programmieren lernt man durch Programmieren" und so habe ich mich mal ran gemacht und habe ein kleinen Kaffeeautomaten geschrieben, welcher auf der Konsole läuft. Nun habe ich jedoch ein Problem, denn wenn ich meinen Code ausführe und Programm 1 wähle und dann eine Zahl kleiner als 75 eingebe beginnt eine while-Schleife in der ein Scanner ist. Doch egal wie viele Zahlen ich da noch eingebe, er geht einfach nicht mehr aus dem Scanner und aus der while-Schleife raus. Nun habe ich mal meinen Code gekürzt und angepasst, damit ihr ihn euch direkt anschauen könnt, denn ich weiß nun wirklich nicht mehr weiter nach insgesamt nun 9 Stunden Java lernen.
Java:
import java.util.Scanner;

public class ProgrammAusführen
{

	public static void main(String[] args)
	{
		//Variablen definieren
		byte programm=0;
		short guthaben = 0;
		short restgeld = 0;
		short einwurf = 0;
		final short KAFFEEPREIS1 = 75;
		//final short KAFFEEPREIS2 = 90;
		//final short KAFFEEPREIS3 = 120;
		
		
		//Programmwahl
		Scanner scan = new Scanner(System.in);
		System.out.println("Bitte wählen sie ihr Programm: ");
		
		programm = scan.nextByte();
		
		System.out.println("Sie haben das Programm " + programm + " gewählt.");
		
			//Überprüfung, welches Programm gewählt wurde
			switch(programm)
				{
				//Kaffee 1
				case 1: programm = 1;
					{
						System.out.println("Bitte bezahlen sie: " + KAFFEEPREIS1 + "ct.");
						guthaben = scan.nextShort();
						System.out.println("Ihr Guthaben beträgt " + guthaben + "ct.");
							//Es wurde zu wenig bezahlt
							while(guthaben < KAFFEEPREIS1);
								{
									System.out.println("Bitte werfen sie mehr geld ein." );
									einwurf = scan.nextShort();
									guthaben = (short) (guthaben + einwurf);
									einwurf = 0;
								}
							//Es wurde der Kaffee bezahlt
							if (guthaben == KAFFEEPREIS1)
								{
									System.out.println("Vielen Dank, ihr Kaffee wird nun zubereitet." );									
								}
							//Es wurde alles bezahlt
							if (guthaben > KAFFEEPREIS1)
								{
									System.out.println("Vielen Dank, ihr Kaffee wird nun zubereitet.");
									System.out.println("Nach den Zubereitungsvorgang erhalten sie ihr Restgeld.");
									restgeld = (short) (guthaben - KAFFEEPREIS1);
									System.out.println("Sie erhalten nun " + restgeld + "ct zurück.");
								}
						break;
				}
			}
		scan.close();
	}
}
Wäre echt nett, wenn jemand mal über den Code schauen könnte und mir sagen kann, warum er aus der Schleife nichtmehr raus geht.
Gruß,
jopeter58
 
Zuletzt bearbeitet:
Hi,

Dein Programm hat den Fehler im While- Loop. Wenn Du den while-Loop mit ";" wird alles was eigentlich im while- Loop ausgeführt werden soll, nur 1 mal ausgeführt..

Ändere dein Programm in

also nicht so:
Java:
while(guthaben < KAFFEEPREIS1); 
{
   dieser Code wird nur 1 mal ausgeführt, da der loop mit ";" direkt abgeschlossen wurde, ohne code 
}

sondern so:

Java:
while(guthaben < KAFFEEPREIS1) 
{
   System.out.println("Bitte werfen sie mehr geld ein." );
   einwurf = scan.nextShort();
   guthaben = (short) (guthaben + einwurf);
   einwurf = 0;
}

noch ein Hinwis,
statt:
Java:
case 1: programm = 1;
{
   ...
}

schreibe besser:

Java:
case 1: 
{
   programm = 1;
   ...
}

hat zwar in diesem Fall keine Auswirkung zum Programm ablauf, ist aber übersichtlicher...

Gruss knilch
 
Zuletzt bearbeitet:

Zurück
Oben