[Java] Newbie-Frage :)

Siforce

Lt. Junior Grade
Registriert
Nov. 2001
Beiträge
394
Hi, ich programmiert seit etwa 2 Wochen mit Java und hab jetzt ein kleines Programm geschrieben, jedoch habe ich ein Problem, hier erstmal das wichtigste:




System.out.println (" Bitte Noten eingeben, 0 zum beenden");

z = IOTools.ReadSimple.readInteger ();

TestSchleife:
while (z!=0) {
switch (z) {
case 1:
z1++;
break;
case 2:
z2++;
break;
case 3:
z3++;
break;
case 4:
z4++;
break;
case 5:
z5++;
break;
case 6:
z6++;
break;
default:
System.out.println (" Fehler, falsche Eingabe");

} // Switch-Schleife

z = IOTools.ReadSimple.readInteger ();

} // while-Schleife

Bei diesem Programm kann man Noten von 1-6 eingeben, die dann später in einer Tabelle ausgedruckt werden. Bei der Eingabe von 0 wird das Programm beendet. Jedoch will ich, das ,nachdem man 0 eingegeben hat, eine Abfrage kommt, ob man wirklich beenden will. Dazu hab ich diesen Text geschrieben und hinter das letzte "z=IOTools.ReadSimple.readInteger" und noch vor der while Klammer (zu) gesetzt:
if (z == 0)
{System.out.println ("Wirklich beenden? (j/n)");
d= IOTools.ReadSimple.readCharacter ();

switch (d) {
case 'j':
break TestSchleife;
case 'n':
z = IOTools.ReadSimple.readInteger ();
break;
default:
System.out.println ("Falsche Eingabe");
d= IOTools.ReadSimple.readCharacter ();
continue;

Es gibt jedoch ein ganz kleines Problem bei dieser Schleife:

wenn ich als erstes für d einen buchstaben ausser j oder n eingeben, fragt er ein 2. mal, mit der fehlermeldung "Falsche Eingabe", jedoch wird das Programm einfach beendet und die Tabelle gedruckt, wenn man ein 2. mal einen flaschen buchstaben eingibt!?
Was hab ich falsch gemacht?
 
Zuletzt bearbeitet:
Wo steht dieses if (z == 0)?

Wenn es nicht im 1. Switch steht, kann es nicht mehrmals ausgeführt werden und bricht unweiterlich ab.

Zur kurzen Erklärung:

switch ist keine Schleife, sondern nur eine kurze Schreibweise für einen Haufen von ifs und else ifs.

continue bricht den aktuellen Schleifendurchgang ab und fängt den nächsten an.

Wenn du continue außerhalb einer Schleife aufrufst, hat es keine Bedeutung.

Als Lösung solltes du ein weiteres case in deine switch anweisung stecken.
Und zwar das für den Fall 0. Dort kannst du dann den Code einbauen, den du in dein if (z == 0) gesteckt hast.
Dort sollte auch das mit dem continue klappen.
Ansonsten poste mal den kompletten code. Benutze dafür dann aber die code Formatierungsoption dieses Forums.

so far, erazor
 
hat sich schon erledigt, habs hinbekommen indem ich ein paar kleine sachen verändert hab und das (z==0) umgestellt hab, danke für die antwort :)
 
Hi,

in dem Source fehlen vielleicht ein paar Tabs, dann könnte man es auch lesen. Schau dir mal ein paar Tutorials über Sourcecodeergonomie an, auch eine ungarische Notation würde nicht schaden, Erkklärungen für beides findest du in Google ;).

Gruß

Toaster
 
Das liegt in dem Fall nicht unbedingt an seinem Code, sondern eher an HTML bzw. den Browsern, die mehrfache Spaces / Tabs / Newlines durch ein Leerzeichen ersetzen.

ein
Code:
 Forum-Tag hilft aber die vorhandenen Formatierungen zu erzwingen.
 
Zurück
Oben