Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Hallo,
Also ich habe folgende Frage:
Wie macht man eine Endloschleife, bewirkt, dass
sich ein kompletter Programmblock solage wiederholt,
bis etwas bestimmtes der Fall ist?
Also zum Beispiel soll sich immer ein JOptionPane Fenster
öffnen, das sagt "Die Zahl ist über 100" wenn man eine Zahl eingegeben hat die über 100 ist.
Und in diesem Fenster was sagt "Die Zahl ist über 100", soll man wieder eine Zahl eingeben können.
Und wenn die Zahl über 100 ist öffnet sich wieder das Fenster.
Hoffe ihr habt verstanden wie ich das meine und könnt mir mal wieder helfen
//Hier, außerhalb der Schleife, die Zahl deklarieren, da die Zahl nur im {} Block sichtbar wäre, wenn du sie innerhalb deklarierst.
do{
//Zahlabfragen
}while(/* Zahlüberprüfen*/);
void endlos() {
int zahl = 0;
do {
JOptionPane pane = new JOptionPane();
zahl = zahlEinlesen(pane);
} while (zahl > 100);
}
int zahlEinlesen(JOptionPane source) {
// Zahl aus source parsen und zurückgeben
}
Unter "Endlosschleife" versteht man normalerweise eine Schleife, die überhaupt keine Abbruchbedingung hat (z.B. ein Server, der "für immer" an einem Port lauscht, bis jemand den Stecker zieht).
Also erstmal vielen Dank für eure Antworten.
Leider haben sie mein Problem aber noch nicht
gelöst. Ich habe nämlich bei allen Antworten die
Kommentare nicht ganz verstanden. Bin halt noch
Anfänger ^^.
Könntet ihr vieleicht nocheinmal das, was ihr mir in
den Kommentaren zwischen dem script sagt, als code
schreiben? Dann würde ich das ganze besser verstehen.
Wäre auch gut wenn ihr in Kommentaren dabei schreibt was
welcher Befehl jetzt macht, da manche neu für mich waren.
Wäre sehr nett und würde mir echt helfen.
Also wenn ich dich richtig verstanden hast willst du jemanden eine Zahl eingeben lassen.
Dies geht über den Befehl
Java:
JOptionPane.showInputDialog("Bitte Ihre Zahl eingeben:");
Diese Methode zeigt einen Dialog, und der Benutzer kann nun eine Zahl reinschreiben. Hat er dies getan, wird die Zahl, die er eingegeben hat, zurückgegeben. Allerdings ist das in erster Linie eine Zeichenkette, es ist also nicht sichergestellt, ob es sich nur um Zahlen handelt. Du kannst diese Zeichenkette folgendermaßen abrufen:
Java:
String eingabe = JOptionPane.showInputDialog("Bitte Ihre Zahl eingeben:");
Diese
Code:
eingabe
ist bestenfalls eine Zahl und im allerbesten Fall eine Zahl unter 100, so wie du es wolltest. Allerdings kann der User auch "Peter" eingeben. Da dein Programm schlau ist, erkennt es sowas (oder auch nicht... du musst es deinem Programm sagen!). Du musst also versuchen, diese
Code:
eingabe
in eine Zahl umzuwandeln (Zahlen und Zeichenketten sind grundsätzlich verschiedene Sachen, also unter "13" versteht der Computer etwas grundsätzlich anderes als unter 13).
Dies geht über die Methode
Java:
int zahl = Integer.valueOf(eingabe);
Wie gesagt wollen wir sichergehen, dass es auch wirklich eine Zahl ist. Falls es keine Zahl ist, wird eine "NumberFormatException" geschmissen, diese müssen wir also abfangen:
Java:
int zahl;
try {
zahl = Integer.valueOf(eingabe);
} catch(NumberFormatException e) {
JOptionPane.showMessageDialog(null, "Die Eingabe ist keine Zahl!!!", "Fehler", JOptionPane.ERROR_MESSAGE); // zeigt Fehlermeldung
}
Und um eine Schleife zu erzeugen, musst du folgendes machen...
Java:
int zahl = 0;
boolean falscheEingabe = false; // dies ist nötig um am Ende zu wissen, ob der Benutzer nun eine Zahl eingegeben hat oder nicht.
String eingabe;
do { // tu folgendes:
eingabe = JOptionPane.showInputDialog("Bitte Zahl eingeben:");
try {
zahl = Integer.valueOf(eingabe);
catch(NumberFormatException e) {
falscheEingabe = true; // merke: Der Benutzer hat eine falsche Zahl eingebeben!
JOptionPane.showMessageDialog(null, "Die Eingabe ist keine Zahl!!!", "Fehler", JOptionPane.ERROR_MESSAGE);
}
} while( zahl > 100 || falscheEingabe); // do-while-Schleife: "do = tu folgendes: [dein Code], while(bedingung) = solange die Bedingung (ein Wert, der wahr oder falsch sein kann) zutrifft. Sobald diese Bedingung falsch ist, wird die Schleife verlassen, ansonsten wird bei tu folgendes weitergemacht. Bei unserem Beispiel: "tu [unserCode] solange zahl größer 100 ODER falsche Eingabe" oder anders: "Sobald der Benutzer eine Zahl eingegeben hat, die kleiner gleich 100 (<= 100) ist, verlasse die Schleife"
Oben wurde dir ja schon erklärt, dass es sich nicht um eine Endlosschleife handelt. Diese wäre nämlich endlos und würde ewig weiterlaufen, ohne einen Abbruch.
Das was du suchst, ist einfach ein Texteingabefeld, welches bei Verlassen (Focus) oder Klicken eines Button (Action) eine Überprüfung des eingegebenen Inhaltes vornimmt. Dann kannst du dir einfach den Inhalt nehmen, überprüfen, und wenn es richtig ist, geht es weiter, wenn es falsch ist, kommt der Hinweis mit dem JOptionPane. Den klickst du z.B. mit OK weg und kannst einen neuen Wert in das Textfeld eingeben - oder mit einem Button "Abbrechen" die ganze Prozedur beenden.
Um den Inhalt des Textfeldes zu überprüfen gibt es mehrere Möglichkeiten: während der Eingabe (DocumentListener), nach Verlassen des Textfeldes (Focus, InputVerifier) oder bei Klicken auf einen Button (ActionListener). In deinem Fall wären wahrscheinlich die beiden letzten eher nützlich.