Java try catch, wie zurück auf Try?

4 Antworten

wow, so viele Antworten, so viele Möglichkeiten, da beteilige ich mich auch mal.

Wie andere auch, wäre es gut das ganze in einer Kopfgesteuerten Schleife zu machen:

Solange die Antwort dem Initialwert entspricht wird die schleife wiederholt. 

Die Antwort wird erst gesetzt (und somit die schleife verlassen) sobald ein erlaubter Wert eingegeben wurde. Wurde ein Fehler Verursacht durch eine nicht-integer-Eingabe behandelt das der Catch-Block.

int antwort = 0;
int[] erlaubteWerte = {1, 2};

while (antwort == 0) {
try { System.out.println("Bitte zahl auswählen"); int input = new Scanner(System.in).nextInt(); if (IntStream.of(erlaubteWerte).anyMatch(x -> x == input)) { antwort= input; } } catch (Exception e) { System.out.println("Es ist ein Fehler aufgetreten"); } } System.out.println("Zahl ausgewählt: " + antwort); }

Du verwendest den Try Block ja nur weil du eine fehlgeschlagene Umwandlung von einem Wort in eine Zahl vermeiden willst. Dann verwende doch den Block nur da und nicht für die Komplette Eingabe.

antwort = 3;

while(antwort > 2){
System.out.println("Nur 1 oder 2!");
System.out.println("Ja = 1\nNein = 2");
try{
antwort = scan.nextInt();
}
catch(Exception e) {
System.out.println("Es ist ein Fehler aufgetreten");
}}
Woher ich das weiß:Berufserfahrung – Beruf, Schule, Hobby und eigene Erfahrungen

Reyha24  14.04.2016, 10:26

Und was ist mit negativen Zahlen? ;)

0
Berny96  14.04.2016, 10:42
@Reyha24

Die werden nicht zugelassen. Es sollen ja nur entweder 1 oder 2 angenommen werden. 0 wird aber zugelassen. was eigentlich falsch ist. Hatte seine Logik kopiert und verbessert :D

1
ceevee  14.04.2016, 10:46
@Reyha24

Wenn negative Zahlen kommen, dann muss man halt die while-Schleife anpassen. Wenn man im catch-Block einen ungültigen Wert für die Variable angibt, also z.B. "antwort = -1" anstatt der Ausgabe, dann müsste das Programm so laufen, wie es der Fragesteller wünscht.

@Sheyn: Es gibt einen Unterschied zwischen "programmieren" und "Code ausm Internet zusammenkopieren, bis es läuft". Es ist wichtig, dass du auch verstehst, was du machst. Vielleicht hilft es, wenn du dir hinter jede Zeile, die dir auch nur halbwegs unklar ist, einen Kommentar schreibst, was diese Zeile macht.

1

Verschieb das try-catch in das Innere der Schleife. 
Mach daraus eine kopfgesteuerte Schleife.

Woher ich das weiß:Berufserfahrung – Programmierer

Sheyn 
Beitragsersteller
 14.04.2016, 11:49

Dann kann ich aber keine Eingabe mehr machen 

0
Suboptimierer  14.04.2016, 12:00
@Sheyn

Sischa doch. Wie sieht deins den aus? Probier mal folgendes:

antwort = 3;
while(antwort > 2) 
{
  try
  {
    antwort = scan.nextInt();
    if(!((antwort == 2)||(antwort == 3)))
    {
      System.out.println("Nur 1 oder 2!");
      System.out.println("Ja = 1\nNein = 2"); 
    }
  }
  catch(Exception e)
  {
    System.out.println("Es ist ein Fehler aufgetreten");     
  }
}

(ungetestet)

0
Sheyn 
Beitragsersteller
 14.04.2016, 12:06
@Suboptimierer

Würde ich "antwort" aber nicht die 3 zuweisen würde es nicht funktionieren

und gebe ich dann einen buchstaben ein, spamt er mir die ganze Konsole voll mit "Es ist ein Fehler aufgetreten" 

0
Suboptimierer  14.04.2016, 12:11
@Sheyn

Das wundert mich und kann ich im Moment nicht erklären, weshalb er den Fehler immer wieder auslöst. Normalerweise müsste es mit jedem Schleifendurchlauf eine Eingabemöglichkeit geben.

Eventuell gibt es noch eine Fehlerstatus-Reset-Möglichkeit. Bin da in Java nicht so bewandert.

Versuch mal, antwort = scan.nextInt(); aus dem try zu ziehen.


Die Meldung mit Ja=1... solltest du natürlich vor die Eingabe ziehen.

0

wenn du eine funktion machst

public int wert(){
int input = sanner.nextint();
if(input == 1 || input == 2){
return input;
}
system.out.println("fehler")
return wert();
}

die rufst du dann mit wert() auf und bekommst immer 1 oder 2 zurück


ceevee  14.04.2016, 10:48

Kann es sein, dass du try/catch nicht wirklich verstanden hast und es deswegen nicht nutzt? Wenn du einen Buchstaben eingibst, dann schmeißt scanner.nextInt() eine Exception.

0