Java for-schleife beenden
habe folgenden code: { try {
Scanner scan = new Scanner (System.in);
int d1 = 3;
int d2 = 5;
Schleife1:
for (double a=0; a<d1 ;a++)
{
System.out.println("Variable a:");
String a1 = scan.next();
a1 = a1.replaceAll("," , ".");
if(!a1.matches("((-|\\+)?[0-9]+(\\.[0-9]+)?)+"))
{
System.out.println("Nur Zahlen!");
continue;
}
double a2 = Double.parseDouble(a1);
for (double b=0;b<d2 ;b++)
{
System.out.println("Variable b:");
String b1 = scan.next();
b1 = b1.replaceAll("," , ".");
if(!b1.matches("((-|\\+)?[0-9]+(\\.[0-9]+)?)+"))
{
System.out.println("Nur Zahlen!");
continue;
}
double b2 = Double.parseDouble(b1);
double c;
c= max1(a2 , b2);
System.out.println(c);
if (c==0) {
System.out.print("Werte gleich");
}
if(a1.matches("((-|\\+)?[0-9]+(\\.[0-9]+)?)+") && b1.matches("((-|\\+)?[0-9]+(\\.[0-9]+)?)+"))
{
break Schleife1;
}
}
}
}
catch (Exception ex)
{
System.out.println("Bitte Zahl eingeben!");
}
Mein Problem ist das die innere Schleife, wenn d2 erreicht wurde, also nach fünfmaliger eingabe z.b. eines buchstaben, zwar beendet wird, dann allerdings die äußere schleife wieder anfängt. was ich allerding will ist, dass wenn d2 in der inneren schleife erreicht wird, das programm komplett beendet wird.
hilfe bitte!
4 Antworten
Nun, da sieht man mal wieder, wozu GOTO doch gut war...
Aber in Java geht das nun mal nicht. Wie du vielleicht schon weißt, kommt man mit dem Schlüsselwort break nur aus der momentan aktuellen Schleife heraus. Daher musst du das Problem anders lösen: Entweder, du beendest das gesamte Programm mit
System.exit(0);
Statt 0 kannst du auch einen anderen Wert angeben; wenn das Programm nicht mit 0 beendet wird, heißt das meist, dass ein Fehler aufgetreten ist. Dem Nutzer kannst du das damit zeigen.
Wenn es nach den zwei Schleifen noch mal weitergehen soll, nimmst du am besten eine Variable hinzu, die immer auf true ist, bis beide Schleifen abgebrochen werden sollen:
boolean breakVar = true;
for(...; (deineBedingung) && breakVar; ...)
{
...
for(...; (deineBedingung2) && breakVar; ...)
{
...
if(programmBeendenBedingung)
{
breakVar = false;
break;
}
}
}
... //hier geht es jetzt weiter
Um dein Programm komplett zu beenden kannst du System.exit(0); benutzen.
Wenn du nur aus den beiden Schleifen rauswillst, lege dir ein boolean Feld (standardmäßig auf true) an dass du mit in die beiden for-Bedingungen nimmst. Wird es false wird keine der Schleifen einen weiteren Durchlauf machen können.
Das wäre jetzt eine simple Methode das zu machen. Wenn ich genau wüsste was dein Code machen soll, könnte man evtl noch bessere Wege finden ohne zusätzliche Indikator-Variable
Der Code macht irgendwie keine Sinn, die Abbruchbedingung der inneren Schleife ist von a1 abhängig, was in der inneren Schleife nicht verändert wird.
Mir scheint es so als ob dein gesamtes Konstrukt falsch angelegt ist, was genau soll der Code leisten? Mir scheint es als müssten die Schleifen eigentlich hintereinander gesetzt werden.
einfach an der stelle, an der es aufhören soll
break;
eingeben, dann passt das schon
die äußere schleife soll eine Variable a abfragen, die innere eine variable b. wenn die eingabe keine zahl ist soll jeweils erneut abgefragt werden, allerdings nur so oft wie vorher im schleifenkopf definiert ist. Wenn für a nun eine zahl eingegben wird geht er in die innere schleife um dort variable b abzufragen. Wenn hier 5 falsche eingaben erfolgen soll das programm beendet werden. bei meinem jetzigen code fängt es allerdings wieder mit der äußeren schleife an und fragt a und b erneut ab.
P.S.: bin absoluter anfänger, habe so codiert wie es für mich logisch erschien.