Java-fout – “Uitzondering in thread “main” java.util.NoSuchElementException

Ik volg een introductiecursus programmeren met Java, dus excuseer mijn onwetendheid als het gaat om programmeerconcepten/terminologie. Een deel van mijn huidige opdracht is om een geheel getal te lezen (overeenkomend met lengte, in inches) en dit om te rekenen naar centimeters, waarbij het uiteindelijke geconverteerde getal wordt afgedrukt als een drijvende-kommawaarde. Ik krijg echter altijd een foutmelding wanneer ik het project probeer uit te voeren (in Eclipse) met de tekst:

Exception in thread "main" java.util.NoSuchElementException
    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 project1.inches(project1.java:82)
    at project1.main(project1.java:17)

Ik heb mijn code verschillende keren bekeken, maar kan er niet achter komen wat het probleem is — Kan iemand me helpen dit op te lossen? Ik zal hieronder een fragment van de broncode toevoegen:

public static void inches() {
    //Define object variables
    int vinch;
    float vcent;
    System.out.println("\n*******************************************************\n");
    System.out.println("Inch to Centimeter Conversion\n\n------------------------\n");
    //Read length (inches)
    System.out.println("Enter a length (in inches):");
    Scanner scanInches = new Scanner(System.in);
    vinch = scanInches.nextInt();
    //Convert input from inches to centimeters & print as float value
    vcent = (float) (vinch * 2.84);
    System.out.println(vinch + " inches is equal to " + vcent + " centimeters.");
    scanInches.close();
}

Bedankt voor je hulp en nogmaals mijn excuses voor zo’n triviale vraag!

**Opmerking: ik weet zeker dat mijn code fouten of onpraktischheden bevat… voel je vrij om erop te wijzen, mocht je die vinden.


Antwoord 1, autoriteit 100%

Laten we de foutmelding ontleden die de runtime nuttig heeft opgeleverd:

Exception in thread "main" java.util.NoSuchElementException
    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 project1.inches(project1.java:82)

Dit betekent dat uw code, op regel 82 van project1.java, de methode java.util.Scanner.nextInt() aanriep, die een fout signaleerde door een java.util.NoSuchElementException te genereren.

Laten we de documentatie:

public int nextInt()

Scan het volgende token van de invoer als een int.

Een aanroep van deze methode in de vorm nextInt() gedraagt zich op precies dezelfde manier als de aanroep nextInt(radix), waarbij radix de standaard radix van deze scanner is.

Retouren:

de int gescand vanaf de invoer

Gooien:

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

NoSuchElementException – als de invoer is uitgeput

IllegalStateException – als deze scanner gesloten is

Daarom geeft een NosuchelementExceptie aan dat u probeerde een ander nummer te lezen, maar System.in is uitgeput.

Dat is raar, omdat System.in meestal is aangesloten op het toetsenbord, dat een onuitputtelijke voorraad keypresses biedt …

De meest waarschijnlijke oorzaak is daarom dat u het programma zonder console hebt gelanceerd, wat een instelling is in uw lanceringconfiguratie:


Antwoord 2

Ik leek geen fout te zien wanneer ik de code uitvoer. Hier is de code, ik heb het net getest om te zien of het correct is en het doet, ik heb maar een paar veranderingen gemaakt.

public class Main {
    public static void main(String[] args) {
        inches();
    }
    public static void inches() {
        //Define object variables
        int vinch = 0;
        float vcent;
        System.out.println("\n*******************************************************\n");
        System.out.println("Inch to Centimeter Conversion\n\n------------------------\n");
        //Read length (inches)
        System.out.println("Enter a length (in inches):");
        Scanner scanInches = new Scanner(System.in);
        if (scanInches.hasNextInt())
        {
            vinch = scanInches.nextInt();
        }
        //Convert input from inches to centimeters & print as float value
        vcent = (float) (vinch * 2.54);
        System.out.println(vinch + " inches is equal to " + vcent + " centimeters.");
    }
}

Zoals je kunt zien, heb ik de methode voor het sluiten van de scanner verwijderd uit de methode van de onderkant van de inches, omdat je deze niet wilt sluiten. Ik heb ook een controle toegevoegd om te zien of er nextInt was om uit de invoer van de gebruiker te halen, gewoon om veilig te zijn. Ook volgens Google is de conversieratio 2,54, niet 2,84, dus dat heb ik ook veranderd.


Antwoord 3

U wilt System.in

niet sluiten

 // scanInches.close();  comment this out

U moet ook testen op de aanwezigheid van een intmet behulp van

if (scanInches.hasNextInt())
    vinch = scanInches.nextInt();

Other episodes