while-Schleife mit exception-handling
Dies ist mein erstes mal mit exception-handling, so sanft sein. Ich habe eine einfache blob-Klasse nimmt eine ID, die ID muss zwischen 30 und 50, oder sonst eine exception geworfen wird.
public class Blob {
int id;
public Blob() {
}
public Blob(int id) throws Exception {
this.id = id;
if (id < 30 || id > 50)
throw new Exception ("id = " +id+ ", must be between 30 and 50 inclusive");
}
}
Sollte es den Benutzer auffordern, geben Sie eine id ein, und werfen die Ausnahme, wenn es nicht zwischen 30 und 50, und sollten fortgesetzt werden, bis der Benutzer eine gültige Eingabe und dann einfach zeigt die id-Nummer.
public class BlobCreator {
public static void main(String[] args) {
int id;
Scanner scan = new Scanner(System.in);
System.out.println("Enter ID number: ");
id = scan.nextInt();
do {
try {
Blob b = new Blob(id);
}
catch (Exception e) {
System.out.println(e);
}
System.out.println("Enter a different ID: ");
id = scan.nextInt();
}
while(true);
}
System.out.println("Blob ID: " +id);
}
Ich denke, ich bin mit dem werfen und fangen richtig, aber meine Schleife funktioniert nicht richtig, so dass ich denke, dass soll eine einfache Lösung, aber ich kann es nicht erhalten, genau das richtige. Auch ist die Verwendung einer while-Schleife, wie ich den besten Weg für diese situation, oder gibt es einen besseren Weg, um eine Schleife durch werfen und fangen?
Vielen Dank für jegliche Hilfe
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie die
break;
nachdem der code erfolgreich ausgeführt.Also jedes mal würde die Schleife bis zum Ende seines Körpers, es würde brechen aus der Schleife. Nur solltest du Pause nach der
blob
erfolgreich erstellt wurde. Obwohl ich dont sehen, warum Sie einebreak
sowieso. Diewhile
Schleife prüfen, ob der eingegebene Eingabe gültig war und einfach aus loop.Modifizierte ich die
while
imdo-while
Schleife... mittrue
die Schleife läuft ewig, es sei denn, es wird keine exception geworfen, indem der Konstruktor... Das macht den code mehr Generika (wenn Sie ändern die Bedingungen des blob-Bau, die Sie nicht ändern müssen, um den Zustand derwhile
loop).id
war richtig in der Faust.id
richtigen ersten mal, Ihr code wird nicht ausgeführtwhile
Körper und somit kein blob erstellt werden. Also modifizierte ich diewhile
imdo-while
Schleife... mittrue
die Schleife läuft ewig, es sei denn, es wird keine exception geworfen, indem der Konstruktor... Das macht den code mehr Generika (wenn Sie ändern die Bedingungen des blob-Bau, die Sie nicht ändern müssen, um den Zustand derwhile
loop).Blob b = new Blob(id);
ist, dass das problem beheben (diebreak
sollte es jedenfalls...)Sorry, seine Art von spät, um die Partei. Hoffe, dass Benutzer, die endup hier können das nützlich finden.
Die Verwendung von
break
Schlüsselwort wird abgeratenHier ist eine sehr einfache Umsetzung, zu brechen, das nach der Umsetzung eines retry-Mechanismus
Dieser durchläuft die Schleife für die angegebene Anzahl von Zeiten, und auch, wenn die Ausnahme noch besteht, dann wird die exception geworfen wird. Dies kann genutzt werden, um für eine tatsächliche Reale Welt Szenario, wo die
resttemplate
könnte tatsächlich dazu führen, IO/Netzwerk-Fehler und können wiederholt werden in diesen Fällen