Java-fout “Uitzondering in thread “main” java.util.InputMismatchException” op een array-programma

Ik heb onlangs dit Java-programma getypt om tien gebieden en hun pincodes te accepteren en vervolgens te zoeken om een bepaald gebied te vinden en de pincode uit te printen.
Hier is de code van het programma:

import java.util.Scanner;
public class Sal {
    public static void main (String args []){ 
        Scanner s=new Scanner(System.in);
        System.out.println("Enter 10 areas and their pincodes");
        String area[]=new String [10];
        int pincode[]=new int [10];
        String search;
        int chk=0;
        int p=0;
        for (int i=0;i<=9;i++){
            area[i]=s.nextLine();
            pincode[i]=s.nextInt();
        }
        System.out.println("Enter Search"); 
        search=s.nextLine();
        for (int j=0;j<=9;j++){
            if(search==area[j]){
                chk=1;
                j=p;
                break;
            }
        }
        if(chk==1){
            System.out.println("Search Found "+"Pincode : "+pincode[p] );
        } else {
            System.out.println("Search not Found");
        }
    }
}

En na het invoeren van twee gebieden krijg ik deze FOUT:

Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Unknown Source)
at java.util.Scanner.next(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at Sal.main(Sal.java:14)

Kan iemand me alsjeblieft vertellen wat ik verkeerd doe! :/
Alle hulp wordt op prijs gesteld.


Antwoord 1, autoriteit 100%

Onthoud allereerst dat u uw code moet laten inspringen voor de leesbaarheid.

Concept 1.

for (int i=0;i<=9;i++){
area[i]=s.next();// Use this for String Input
pincode[i]=s.nextInt();
s.nextLine();//Use this for going to next line of input
}

Concept 2.

if(search.compareTo(area[j])==0){ 

// vergelijk Strings met behulp van de methode CompareTo (die 0 retourneert indien gelijk

De rest van je code en concepten zijn correct 🙂


Antwoord 2, autoriteit 60%

Van de documenten voor Scanner#nextInt():

InputMismatchException – als het volgende token niet overeenkomt met de Integer reguliere expressie, of buiten bereik is

Het klinkt dus alsof uw Scannereen intprobeert in te lezen, maar iets krijgt dat niet kan worden omgezet in een int(ofwel wat het leest is geen getal of het is te groot).

Je roept de relevante functie hier aan:

for (int i=0;i<=9;i++){
    area[i]=s.nextLine();
    pincode[i]=s.nextInt(); // <-- the culprit
}

Mijn gok is dat je aanroep van .nextLine()op een gegeven moment een hele regel opslokt, en de volgende regel begint met een “gebied”. Ik kan niet meer doen zonder te weten hoe je verwacht dat de invoer wordt opgemaakt.


Antwoord 3, autoriteit 20%

Van InputMismatchException’s JavaDoc:

Door een scanner gegooid om aan te geven dat het opgehaalde token niet overeenkomt met het patroon voor het verwachte type, of dat het token buiten bereik is voor het verwachte type.

Het lijkt erop dat je een string hebt ingevoerd terwijl nextInt()een geheel getal verwacht.


Antwoord 4, autoriteit 20%

Ik neem aan dat de fout optreedt op de regel pincode[i]=s.nextInt();(dat is regel 14). De reden dat dit gebeurt is omdat de invoer (van System.in) niet kan worden geparseerd als een int. Weet u zeker dat u de juiste waarden invoert?


Antwoord 5, autoriteit 20%

De invoer kan niet worden geparseerd als een geheel getal.
Misschien heb je een komma aan het einde van de regel.

BTW:

if(search==gebied[j])

is een slechte gewoonte om stringgelijkheid te controleren. gebruik search.equals(area[j]) met nulcontrole.


Antwoord 6

Ik ben nieuw in programmeren. Ik kreeg echter te maken met hetzelfde probleem dat zich voordeed bij het maken van klanten voor de bank (het is slechts een oefenprobleem). Om het probleem op te lossen heb ik aparte scanners gemaakt voor elk invoertype & Sluit alle scanners aan het einde van het programma. Het werkte.

Other episodes