try/catch-Block bei for-Schleife

drei_und_20

Mitglied
Guten Abend. Ich versuche bei dieser Methode zum Array einlesen einen try/catch-Block mit einer InputMismatchException einzufügen, so dass bei Eingabe eines Buchstabens die for-Schleife und Eingabe über den Scanner erneut abläuft. Leider wird dieser bei bisher jedem meiner Versuch abgebrochen.

Java:
    public void arrayEinlesen() {
        Scanner sc = new Scanner(System.in);
        for (int i = 0; i < array.length; i++) {
            System.out.println("Geben sie eine Zahl ein. <0 zum beenden>");
            array[i] = sc.nextInt();
            if (array[i] <= this.obereGrenze && array[i] >= this.untereGrenze && array[i] != 0) {
                System.out.println("Zahl korrekt");
                anzKorrekt++;
            } else if (array[i] >= this.obereGrenze || array[i] <= this.untereGrenze && array[i] != 0) {
                System.out.println("Zahl nicht korrekt");
                i--;
                anzFalsch++;
            } else if (array[i] == 0) {
                break;
            }
        }
        arrayNeu = Arrays.copyOf(array, anzKorrekt);

    }

Kann mir dabei evt jemand helfen?
Vielen Dank und lg
 

Blender3D

Top Contributor
Leider wird dieser bei bisher jedem meiner Versuch abgebrochen.
Zerlege das Ganze in Funktionen.
[CODE lang="java" highlight="9-13,16-34,36-53"]import java.util.Arrays;
import java.util.InputMismatchException;
import java.util.Scanner;

public class StartArrayInput {
static Scanner input = new Scanner(System.in);
public static void main(String[] args) {
int[] array = new int[10];
System.out.println("Abruch durch eine Zahl <0!");
InputStatistic statistic = inputIntArray(array, 10, 30);
System.out.println(Arrays.toString(array));
System.out.println(statistic);
}

public static InputStatistic inputIntArray(int[] array, int min, int max) {
InputStatistic statistic = new InputStatistic();
for (int i = 0; i < array.length; i++) {
try {
array = inputInt((i + 1) + ". Zahl bitte eingeben", min, max);
if (array < 0) {
array = 0;
return statistic;
}
System.out.println("Zahl korrekt");
statistic.correct();
} catch (InputMismatchException e) {
System.out.println("Zahl nicht korrekt");
statistic.error();
i--;
}
}
return statistic;
}

private static int inputInt(String label, int min, int max) throws InputMismatchException {
boolean ok = false;
int value = 0;
do {
System.out.print(label + " [" + min + "-" + max + "]" + " >");
try {
value = Integer.parseInt(input.next());
if (value < 0)
return value;
if (value < min || value > max)
throw new InputMismatchException("Wert liegt nicht im Bereich [" + min + "-" + max + "]");
ok = true;
} catch (NumberFormatException e) {
System.out.println("Bitte eine ganze Zahl eingeben!");
}
} while (!ok);
return value;
}
}[/CODE]
[CODE lang="java" title="InputStatistic"]public class InputStatistic {
private int error = 0;
private int correct = 0;

public void correct() {
correct++;
}

public void error() {
error++;
}

@Override
public String toString() {
return "RICHTIG " + correct + ", FALSCH " + error;
}
}[/CODE]
 

Jw456

Top Contributor
Na den Code habe ich doch erst vor kurzen gesehen hier im Forum.

Der User / Account der das gepostet hatte gibt es nicht mehr, das scheinst du gewesen zu sein.
Wieso ein neuer User?

Du hattest Probleme mit dem Konstruktor habe da auch Antwort gegeben jetzt ist der User gelöscht schon merkwürdig bei jedem Problem einen neuen User anzulegen.
 

Jw456

Top Contributor
Ich würde es nicht mit Try/Catch machen.

Ich würde mit eine while prüfen ob es ein int ist.
Die solange läuft bis ein int eingeben wurde.
Falsche Eingaben musst du natürlich in der Schleife abholen. Sonnst geht es nicht weiter.
deshalb das String stline = sc.nextLine();


Java:
public void arrayEinlesen() {
        Scanner sc = new Scanner(System.in);
        for (int i = 0; i < array.length; i++) {
            System.out.println("Geben sie eine Zahl ein. <0 zum beenden>");
         
            while (!sc.hasNextInt()) {
                String stline = sc.nextLine();
      
            }     
                     
            array[i] = sc.nextInt();
            .....
 
Zuletzt bearbeitet:
M

Mart

Gast
Ich würde es nicht mit Try/Catch machen.
eine Ausführliche Begrüdnung wäre , wenn du durch abfragen auf Gültigkeit nicht in das try catch läufst bist du besser unterwegs als mit try catch

zb eine additions Methode
Java:
public int addieren(int summandEins, int summandZwei)
{
    return summandEins + summandZwei;
}
diese Methode kannst du aufteilen auf eine Public und private variante
i n der public fangst du "dämliche"werte ab zb wenn 1e zahl 0 ist
Java:
public int addieren(int summandEins,int summandZwei)
{
    if(summandZwei == 0){
        return summandEins;
    }
    return addierenIntern(...);
}
private int addierenIntern(...){
    ...
}
gut macht das beispiel viel sinn es hier anzuwenden? nien...

1 Beispiel wo genau das system angewandt wird ist beim Binär Baum, wenn du die Knoten Zählen musst die drin sind, wenn der Bamu aber leer ist läufst du in eine Nullpointer Exception aber die Methode müsste eig richtig sein wenn
Java:
if(baum = leer)
{
    return 0;
}
stimmt ja der baum hat 0 knoten

die exception wäre hier aber kontra produktiv gewesen, weil das ergebnis falsch gewesen wäre... die methode musste halt nur den Grenzfall von leer sein abdecken ( manchmal nur mit exception möglich )
 

Jw456

Top Contributor
Es geht ja erst mal darum das das Zeichen was von der Tastatur kommt auch eine Ziffer ist und nicht etwa ein Buchstabe oder Sonderzeichen was dann die Scanner nextint Methode nicht in einen int parsen kann.

Ja man kann oder sollte es in eine eigene Methode packen.


Aber dein Beispiel mit der Addition
ist am Tehma vorbei.
Es geht um das prüfen eines Daten Typs.
 

drei_und_20

Mitglied
Na den Code habe ich doch erst vor kurzen gesehen hier im Forum.

Der User / Account der das gepostet hatte gibt es nicht mehr, das scheinst du gewesen zu sein.
Wieso ein neuer User?

Du hattest Probleme mit dem Konstruktor habe da auch Antwort gegeben jetzt ist der User gelöscht schon merkwürdig bei jedem Problem einen neuen User anzulegen.
Nein ich hab keinen neuen Account ich musste nur den Beitrag löschen weil ich ne Meldung bekommen habe, dass ich die Aufgabenstellung nicht hätte hier veröffentlichen dürfen. Daher jetzt ein neuer Beitrag mit nur diesem Teilaspekt und ohne Aufgabenstellung.
 

Jw456

Top Contributor
Na dann weißt du ja was ich schon gesagt geschrieben hatte.
Wirst es dir wohl kopiert haben.

Wir du das Thema lösen kannst habe ich ja nun gezeigt.
 

drei_und_20

Mitglied
ich lehn mich ma weit ausm fenster und finde nach paar minuten im internet die gleiche aufgabe ...
Tut mir leid, ich finde die Aufgabe nicht. Aber ich verstehe auch nicht so ganz was das Problem ist. Ich sollte die Aufgabenstellung rausnehmen und habe jetzt eine neue Frage gestellt nur ohne die konkrete Aufgabe zu veröffentlichen. Trotzdem danke für die Hilfe.
 
M

Mart

Gast
Java:
public boolean isInt(String input) {
    try {
        Integer.parseInt(input);
        return true;
    } catch (final NumberFormatException e) {
        return false;
    }
}
so könntest du die Überprüfungs methode schreiben die ausgeführt wird bevor du weiter machst aber das war ja am content vorbei
 

Jw456

Top Contributor
ich habe ihm doch schon eine Lösung gegeben ohne try & catch.

für was gibst es denn sonst die "has..... " Methoden von dem Scanner. Doch wohl um zu prüfen was im Tastaturbuffer ist.
Java:
while (!sc.hasNextInt()) {
     String stline = sc.nextLine();
     
  }

PS @drei_und_20 schon kommisch das du nicht zu den genanten Lösungen sagst .
 
Zuletzt bearbeitet:

drei_und_20

Mitglied
Java:
while (!sc.hasNextInt()) {
     String stline = sc.nextLine();
    
  }
Tut mir leid, habe ich versucht, aber irgendetwas scheine ich doch falsch eingegeben zu haben, sodass das bei mir nicht zur gewünschten Lösung führt. Weiß einfach nicht was ich mit dem neuen String dann machen soll. Aber wenn man gerade erst mit Java anfängt sieht man manchmal die einfachsten Dinge nicht...
 

Jw456

Top Contributor
Eigentlich brauchst nicht damit machen dient nur zum abholen des Tastatur Buffers wenn kein gültiger "int" im Buffer ist.

Ok du bleibst in der Schleife bekommst keine Ausgabe wen etwas falsches Eingegeben wurde.
Die Schleife wartet bis ein echter „int“ Wert eingegeben wurde. Eine Eingabe ist immer mit Return zu beenden erst dann wird geprüft.
Ist aber bei nextInt() auch so das da auf das Return gewartet wird. Und erst jetzt das Parsen beginnt.
Wenn ein int im Buffer ist geht es nicht in schleife sondern weiter zum nextInt() und das parsen erfolgt ohne Fehler.
Wenn es in die Schleife geht musst du das falsche aus dem Buffer holen, das machst mit der hilfst Variable . Zu mehr ist sie nicht da.

Wenn du eine Fehler Ausgabe haben willst etwa so.

Java:
for (int i = 0; i < array.length; i++) {
            System.out.println("Geben sie eine Zahl ein. <0 zum beenden>");

            while (!sc.hasNextInt()) {
                String stline = sc.nextLine();
                if (!stline.trim().isEmpty()) {
                    System.out.println("nur ganze Zahlen");
                }
            }

            array[i] = sc.nextInt();
            System.out.println("es wurde " +array[i]+ " eingeben");
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
E Problem mit for schleife/ try-catch block Java Basics - Anfänger-Themen 7
B Try-Catch Block Java Basics - Anfänger-Themen 3
F Mehrere Exceptions in einem Catch-Block abfangen Java Basics - Anfänger-Themen 12
J Code in Try-Catch Block wird nicht komplett ausgeführt Java Basics - Anfänger-Themen 5
A Nicht zu findender Fehler in einem try/catch Block Java Basics - Anfänger-Themen 6
E Buchstaben verhindern / Try & Catch Block Java Basics - Anfänger-Themen 3
L Warum ist der catch-Block nicht erreichbar ? Java Basics - Anfänger-Themen 8
N Catch Block in Try erzwingen Java Basics - Anfänger-Themen 14
N try and catch block in finally Java Basics - Anfänger-Themen 8
B Exception vor catch Block definieren Java Basics - Anfänger-Themen 9
V Was ist ein Try-Catch Block Java Basics - Anfänger-Themen 4
M Exception->mehrere Exceptions in einem Catch Block behand Java Basics - Anfänger-Themen 4
T catch(InputMismatchException) wird nicht ausgefürt/erkannt Java Basics - Anfänger-Themen 12
missy72 Catch Blöcke zusammenfassen Java Basics - Anfänger-Themen 6
Ostkreuz wie geht der catch? Java Basics - Anfänger-Themen 3
D Best Practice Ausgabe über direkte Ausgabe oder try-catch? Java Basics - Anfänger-Themen 13
districon Try - Catch Java Basics - Anfänger-Themen 8
JavaNoobi Try and Catch und übergabe von Objekten Java Basics - Anfänger-Themen 2
Y Wie kann ich die Variable in der Try Catch returnen? Java Basics - Anfänger-Themen 3
B JUnit / Exceptions/ try-catch Java Basics - Anfänger-Themen 6
B try catch finally Java Basics - Anfänger-Themen 2
H throws und try catch Java Basics - Anfänger-Themen 8
H Try Catch Throw Exception Java Basics - Anfänger-Themen 1
S Try-Catch in Verwendung einer while Schleife Java Basics - Anfänger-Themen 2
I Try-Catch innerhalb eines Catchblocks Java Basics - Anfänger-Themen 1
J Endlosschleife bei Try-Catch? Java Basics - Anfänger-Themen 3
K JOptionPane/catch/try/finally/if Java Basics - Anfänger-Themen 9
V InputMismatchException (Try and catch) Java Basics - Anfänger-Themen 10
L do-while-Schleife läuft doppelt, try catch fehler Java Basics - Anfänger-Themen 12
J Erste Schritte catch Exeption Parameter Java Basics - Anfänger-Themen 7
TheMenox Try and Catch Java Basics - Anfänger-Themen 12
J Try Catch Java Basics - Anfänger-Themen 6
DeVolt Java8 Paket Time: Datum prüfen / try-catch Java Basics - Anfänger-Themen 1
J Frage zum Thema Exceptions (Try/Catch) Java Basics - Anfänger-Themen 3
F try/catch Ausführungen ? Java Basics - Anfänger-Themen 3
S try-catch - Variablen werden nicht an return übergeben Java Basics - Anfänger-Themen 3
Z Catch & Exceptions Java Basics - Anfänger-Themen 4
I Exception try-catch Java Basics - Anfänger-Themen 1
F try/catch - (else) Java Basics - Anfänger-Themen 11
C Problem mit try-catch in Schleife Java Basics - Anfänger-Themen 15
R Exceptions (try/catch) Java Basics - Anfänger-Themen 63
H Geht dieser Code noch einfacher (try catch finally) Java Basics - Anfänger-Themen 7
J Methoden try / catch exception Java Basics - Anfänger-Themen 5
S 'continue' in catch- und if-blöcken Java Basics - Anfänger-Themen 2
B Erste Schritte try-catch-Klauseln, überprüfte Ausnahmen Java Basics - Anfänger-Themen 4
D Erste Schritte Warum try-catch für FileWriter Java Basics - Anfänger-Themen 5
S try-catch-finally-Problem Java Basics - Anfänger-Themen 10
xehpuk Compiler-Fehler final Variable in try-catch Wert zuweisen Java Basics - Anfänger-Themen 8
F Exceptionbehandlung --> catch/throws Java Basics - Anfänger-Themen 11
M Try und Catch Java Basics - Anfänger-Themen 5
B Fehler mit try + catch verhindern Java Basics - Anfänger-Themen 8
B Variablen Variablen in try / catch "public" machen? Java Basics - Anfänger-Themen 3
C Wiederholung von try-catch Java Basics - Anfänger-Themen 3
M exception catch falsch? Java Basics - Anfänger-Themen 11
S catch Exception erklären Java Basics - Anfänger-Themen 2
C Variable in try/catch Java Basics - Anfänger-Themen 10
B Try and Catch Java Basics - Anfänger-Themen 6
StrikeTom Ein paar(2) Fragen zu throws und try + catch Java Basics - Anfänger-Themen 6
J try und catch Java Basics - Anfänger-Themen 7
G Exceptionfreie Anweisungen in try-catch-Blöcke, Java Basics - Anfänger-Themen 6
M Frage zu try ... catch Java Basics - Anfänger-Themen 9
S NumberFormatException , mit Try/Catch? Java Basics - Anfänger-Themen 7
B Try/catch Java Basics - Anfänger-Themen 11
M Try & Catch Java Basics - Anfänger-Themen 7
M Nach catch mit der schleife weitermachen Java Basics - Anfänger-Themen 9
M try-catch, call-by-reference, Streaming und Strings Java Basics - Anfänger-Themen 10
S sauberer Stil von return Wert (try, catch, finally) Java Basics - Anfänger-Themen 9
S try-catch Java Basics - Anfänger-Themen 10
Tandibur Server führt "try-catch" nicht aus Java Basics - Anfänger-Themen 6
H Falsche Eingabe über try-catch abfangen Java Basics - Anfänger-Themen 2
I Frage zu Try - Catch - Finally Java Basics - Anfänger-Themen 10
Daniel_L Verwendung von try und catch bei exceptions Java Basics - Anfänger-Themen 7
GambaJo Wann try.catch nutzen? Java Basics - Anfänger-Themen 11
H try catch Java Basics - Anfänger-Themen 4
I double-Variable außerhalb des Try-Catch-Blocks nicht gültig Java Basics - Anfänger-Themen 2
D Catch wiederholt sich ständig Java Basics - Anfänger-Themen 2
T try-catch-finally Java Basics - Anfänger-Themen 8
G Anwendung von try-catch Java Basics - Anfänger-Themen 10
G try. catch Verwendung Java Basics - Anfänger-Themen 11
M Try-Catch-Problem Java Basics - Anfänger-Themen 4
G habe ein Catch problem Java Basics - Anfänger-Themen 7
C Nach Catch-Klausel Programm weiter laufen lassen Java Basics - Anfänger-Themen 5
B try & catch Problem mit Exception bzw String.split() Java Basics - Anfänger-Themen 5
C Frage zu try - catch (saubere Lösung?) Java Basics - Anfänger-Themen 3
G Bei catch beenden Java Basics - Anfänger-Themen 7
U catch mit finally Java Basics - Anfänger-Themen 5
C Exceptions, try, catch --> Frage Java Basics - Anfänger-Themen 7
J Try-Catch-Frage Java Basics - Anfänger-Themen 13
B catch exception funktioniert nicht! Java Basics - Anfänger-Themen 14
D Frage try and catch Java Basics - Anfänger-Themen 7
ven000m try catch - was muss bei catch rein Java Basics - Anfänger-Themen 28
G Datenbank - catch Java Basics - Anfänger-Themen 2
H Konstruktor in Methode fremder Klasse: try-catch-Problem Java Basics - Anfänger-Themen 4
M return und try-catch Java Basics - Anfänger-Themen 6
M Try . catch erzwungen? Java Basics - Anfänger-Themen 11
F eigene Exception aus try-catch werfen Java Basics - Anfänger-Themen 10
A Syntaxproblem mit try und catch Java Basics - Anfänger-Themen 3
Silver-Blue fragen zu Swing und catch Exceptions Java Basics - Anfänger-Themen 2
G return fehler bei try catch Java Basics - Anfänger-Themen 8
H try und catch Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben