InputMissmatchException

Hallo,
ich bekomme immer den folgenden Fehler:

Code:
Exception in thread "main" java.util.InputMismatchException

    at java.base/java.util.Scanner.throwFor(Scanner.java:860)

    at java.base/java.util.Scanner.next(Scanner.java:1497)

    at java.base/java.util.Scanner.nextInt(Scanner.java:2161)

    at java.base/java.util.Scanner.nextInt(Scanner.java:2115)

    at de.uni_hannover.sim.nico.automat.Automat.start(Automat.java:15)

    at de.uni_hannover.sim.nico.Main.main(Main.java:13)

Habe meinen eigenen Code jetzt schon sehr aufgestückelt, um an den Fehler zu kommen, jedoch finde ich in trotzdem nicht..

Hier meine Automat class:

Java:
package de.uni_hannover.sim.nico_ostendorf.automat;
import de.uni_hannover.sim.nico_ostendorf.kunde.*;
import java.util.*;
import java.io.*;

public class Automat {
    public void start(File f){
        Scanner s;
        Kunde kundenlist[] = new Kunde[50];
        try{
            s = new Scanner(f);
            for (int i = 0; i < kundenlist.length && s.hasNext(); i++){
                kundenlist[i] = new Kunde();
                if (s.hasNext()){
                    kundenlist[i].kundennummer = s.nextInt();
                }
                if(s.hasNext()){
                    kundenlist[i].name = s.next();
                }
                if(s.hasNext()){
                    kundenlist[i].vorname = s.next();
                }
                if(s.hasNext()){
                    kundenlist[i].kontostand = s.nextDouble();
                }
                if(s.hasNext()){
                    kundenlist[i].dispo = s.nextDouble();
                }
            }
        }

        catch(FileNotFoundException e){
            System.exit(0);
        }


        String benutzername = javax.swing.JOptionPane.showInputDialog( "Wie ist ihre Kundennummer?" );
        Kunde aktuellerkunde = kundenlist[0];

        for (int i = 0; i <= kundenlist.length; i++){
            if (i < kundenlist.length){
                if (kundenlist[i].kundennummer == Integer.parseInt(benutzername)){
                    aktuellerkunde = kundenlist[i];
                    break;
                }
            }
            if (i == kundenlist.length){
                System.out.println("Sie sind kein Kunde!");
                System.exit(0);
            }
        }

        String passwort = javax.swing.JOptionPane.showInputDialog( "Wie lautet ihr Nachname?" );
        if ( passwort.equals(aktuellerkunde.name) == false ){
            System.exit(0);
        }


        String vorhaben = javax.swing.JOptionPane.showInputDialog( "Was möchten sie machen?" );

        if (vorhaben.equals("Geld abheben")){
            double gelder = 1;
            if (aktuellerkunde.genuggeld()){
                String geld = javax.swing.JOptionPane.showInputDialog( "Wie viel Geld möchten Sie abheben?" );
                try{
                    gelder = Double.parseDouble(geld);
                }
                catch(NumberFormatException q){
                    System.err.println("Sie haben keinen Geldbetrag eingegeben!");
                    System.exit(0);
                }

                if (gelder <= aktuellerkunde.wieviel()){
                    System.out.printf("Sie haben %f Euro abgehoben.%n", gelder);
                    aktuellerkunde.kontostand = aktuellerkunde.kontostand - gelder;
                }

                else {
                    System.out.printf("Sie können nur %f Euro abheben. Geld wird ausgegeben.... %n", aktuellerkunde.wieviel());
                }


            }

            else {
                System.out.println("Sie können leider kein Geld mehr abheben!");
            }
        }

        if (vorhaben.equals("Kontostand anzeigen")){
            System.out.printf("Sie haben aktuell %f Euro auf dem Konto%n", aktuellerkunde.kontostand);
            String jetzt = javax.swing.JOptionPane.showInputDialog( "Möchten Sie noch was tun?" );
            if (jetzt.equals("ja")){
                fortsetzen(aktuellerkunde);
                System.exit(0);
            }
            else {
                System.exit(0);
            }
        }

        if (vorhaben.equals("Geld einzahlen")){
            double gelder = 1;
            String geld = javax.swing.JOptionPane.showInputDialog( "Wie viel Geld möchten Sie einzahlen?" );
                try{
                    gelder = Double.parseDouble(geld);
                }
                catch(NumberFormatException q){
                    System.err.println("Sie haben keinen Geldbetrag eingegeben!");
                    System.exit(0);
                }
            aktuellerkunde.kontostand = aktuellerkunde.kontostand + gelder;
            System.out.printf("Sie haben jetzt %f Euro auf dem Konto", aktuellerkunde.kontostand);

        }



    }

    public void fortsetzen (Kunde aktuellerkunde){

        String vorhaben = javax.swing.JOptionPane.showInputDialog( "Was möchten sie jetzt machen?" );

        if (vorhaben.equals("Geld abheben")){
            double gelder = 1;
            if (aktuellerkunde.genuggeld()){
                String geld = javax.swing.JOptionPane.showInputDialog( "Wie viel Geld möchten Sie abheben?" );
                try{
                    gelder = Double.parseDouble(geld);
                }
                catch(NumberFormatException q){
                    System.err.println("Sie haben keinen Geldbetrag eingegeben!");
                    System.exit(0);
                }

                if (gelder <= aktuellerkunde.wieviel()){
                    System.out.printf("Sie haben %f Euro abgehoben.%n", gelder);
                    aktuellerkunde.kontostand = aktuellerkunde.kontostand - gelder;
                }

                else {
                    System.out.printf("Sie können nur %f Euro abheben. Geld wird ausgegeben.... %n", aktuellerkunde.wieviel());
                }


            }

            else {
                System.out.println("Sie können leider kein Geld mehr abheben!");
            }
        }

        if (vorhaben.equals("Kontostand anzeigen")){
            System.out.printf("Sie haben aktuell %f Euro auf dem Konto%n", aktuellerkunde.kontostand);
        }

        if (vorhaben.equals("Geld einzahlen")){
            double gelder = 1;
            String geld = javax.swing.JOptionPane.showInputDialog( "Wie viel Geld möchten Sie einzahlen?" );
                try{
                    gelder = Double.parseDouble(geld);
                }
                catch(NumberFormatException q){
                    System.err.println("Sie haben keinen Geldbetrag eingegeben!");
                    System.exit(0);
                }
            aktuellerkunde.kontostand = aktuellerkunde.kontostand + gelder;
            System.out.printf("Sie haben jetzt %f Euro auf dem Konto%n", aktuellerkunde.kontostand);

        }

        String jetzt = javax.swing.JOptionPane.showInputDialog( "Möchten Sie noch was tun?" );
        if (jetzt.equals("ja")){
            fortsetzen(aktuellerkunde);
        }
        else {
            System.exit(0);
        }

    }
 
}


Meine Kunde Klasse:
Java:
package de.uni_hannover.sim.nico_ostendorf.kunde;

public class Kunde {
    public String name;
    public String vorname;
    public int kundennummer;
    public double kontostand;
    public double dispo;

    public Kunde(){
        name = "";
        vorname = "";
        kundennummer = 0;
        kontostand = 0;
        dispo = 0;
    }

    public Kunde(int kundennummer, String name, String vorname, double kontostand, double dispo){
        this.name = name;
        this.vorname = vorname;
        this.kundennummer = kundennummer;
        this.kontostand = kontostand;
        this.dispo = dispo;
    }


    public double wieviel (){
        return kontostand - dispo;
    }

    public boolean genuggeld (){
        return (this.wieviel() > 0);
    }

    public void neuerkontostand(double i){
        this.kontostand = kontostand - i;
    }
}

und meine Main Methode:
Code:
package de.uni_hannover.sim.nico_ostendorf;
import de.uni_hannover.sim.nico_ostendorf.kunde.*;
import de.uni_hannover.sim.nico_ostendorf.automat.*;
import java.io.*;

public class Main {
    /**
    *    Starts the simulation.
    */
    public static void main(String[] args) {
        Automat automat = new Automat();
        File f = new File("/Users/nicoostendorf/Desktop/funjava/de/uni_hannover/sim/nico_ostendorf/kunden.rtf");
        automat.start(f);
    }
}

Meine Textdatei:
Code:
1001 Leiter Thomas 500 200
1002 Thomas Reiner 1500 250
1003 Muller Tim 20 0
1004 Sehrbe Julia 11000 1000
1005 Stalk Anne 5400 500
1006 Meyer Nick 20000 10000
 

Robat

Top Contributor
Welche Zeile ist denn genaue Zeile 15 in der Automatenklasse?
Prinzipiell solltest du auf 1 was achten: momentan prüfst du immer ob hasNext() true ist und liest dann bspw. ein int ein.
Nutz lieber die entsprechenden hasNextXYZ() Methoden wie zum Beispiel hasNextInt(), hasNextDouble(), ...
 
Welche Zeile ist denn genaue Zeile 15 in der Automatenklasse?
Prinzipiell solltest du auf 1 was achten: momentan prüfst du immer ob hasNext() true ist und liest dann bspw. ein int ein.
Nutz lieber die entsprechenden hasNextXYZ() Methoden wie zum Beispiel hasNextInt(), hasNextDouble(), ...

Dies ist Zeile 15:
kundenlist.kundennummer = s.nextInt();

Habe es jetzt mit hasNextInt gemacht, allerdings erkennt er nicht, dass der Wert in der Textdatei ein Integer ist.. also liest er ihn garnicht erst ein.
 

Robat

Top Contributor
Kann ich ehrlich gesagt nicht reproduzieren ..
Bei mir klappt es so mit folgender Testdatei.
Java:
Scanner s = new Scanner(new File("..."));

for (int i = 0; s.hasNext(); i++){
    if (s.hasNextInt()){
        int x = s.nextInt();
        System.out.print(x + " ");
    }
    if(s.hasNext()){
        String name = s.next();
        System.out.print(name + " ");
    }
    if(s.hasNext()){
        String name = s.next();
        System.out.print(name + " ");
    }
    if(s.hasNextDouble()){
        double x = s.nextDouble();
        System.out.print(x + " ");
    }
    if(s.hasNextDouble()){
        double x = s.nextDouble();
        System.out.print(x + " ");
    }
    System.out.println();
}

Code:
1001 Leiter Thomas 500 200 
1002 Thomas Reiner 1500 250 
1003 Muller Tim 20 0 
1004 Sehrbe Julia 11000 1000 
1005 Stalk Anne 5400 500 
1006 Meyer Nick 20000 10000
 

Neue Themen


Oben