Scanner- Exception NoSuchElementException

DrPils

Bekanntes Mitglied
Hallo,

Ich mache gerade eine Übung in der ich eine Kaffeemaschine simulieren, soll. Das Menu soll in einer Endlosschleife laufen und man soll Getränke kaufen können(solange genug Zutaten in der Maschine sind). Das funktionierte auch alles perfekt.
Nun musste ich die actionBuy() funktion umschreiben, da ein neues Parameter zur Getränkeauswahl hinzukam. Vorher wurde der Benutzer nur Aufgefordert eine Zahl von 1 bis 3 einzugeben. Diese Zahl wurde zurückgegeben und ich habe die Methode buy(int selection) damit aufgerufen. Diese hat dann entsprechend des übergebenen Integers die Methode für das Getränk gestartet.
Da jetzt der befehl exit zum Abbruch des kaufs hinzukommen sollte, musste ich die Methode abändern. der Rückgabetyp von actionBuy() ist nun String und dementsprechend erwartet buy() nun einen String als Parameter.
Beim ersten Schleifen durchlauf klappt auch alles, aber nachdem das Getränk gekauft wurde, wird eine Exception ausgelöst.
Die Exception wird zwar durch startEngine() ausgelöst, aber vor der dem Umschreiben der actionBuy() und buy() wurde Sie noch nicht ausgelöst. Ich denke es liegt darann, dass der Scanner nichts zum lesen hat. Aber wie ich das lösen kann ist mir nicht bewusst. Ich dachte der Scanner "wartet" auf eine eingabe. So war es bisher zumindest...


Java:
package machine;

import java.util.Scanner;

public class CoffeeMachine {
    static int water = 400;
    static int milk = 540;
    static int coffeeBeans = 120;
    static int money = 550;
    static int cups = 9;
    public static final Drink ESPRESSO = new Drink("Espresso", 250, 0, 16, 4);
    public static final Drink LATTE = new Drink("Latte", 350, 75, 30, 7);
    public static final Drink CAPPUCCINO = new Drink("Cappuccino", 200, 100, 12, 6);


    public static class Drink {


        String name;
        int water, milk, coffeeBeans, money, cups;


        public Drink(String name, int water, int milk, int coffeeBeans, int money) {
            this.name = name;
            this.water = water;
            this.milk = milk;
            this.coffeeBeans = coffeeBeans;
            this.money = money;
            this.cups = 1;
        }

    }


    public static void main(String[] args) {
        startEngine();
    }

    private static void startEngine() {

        while (true) {
            Scanner scanner = new Scanner(System.in);

            System.out.println("Write action (buy, fill, take, remaining, exit)");
            String action = scanner.next();
            if (action.equalsIgnoreCase("buy")) {
                buy(actionBuy());
            } else if (action.equalsIgnoreCase("fill")) {
                actionFill();
            } else if (action.equalsIgnoreCase("take")) {
                actionTake();
            } else if (action.equalsIgnoreCase("remaining")) {
                showInfo();
            } else if (action.equalsIgnoreCase("exit")) {
                break;
            }
        }

    }

    private static void showInfo() {
        System.out.println();
        System.out.printf("The coffee machine has:%n" +
                        "%d of water%n" +
                        "%d of milk%n" +
                        "%d of coffee beans%n" +
                        "%d of disposable cups%n" +
                        "$%d of money%n",
                water, milk, coffeeBeans, cups, money
        );
    }

    private static void actionTake() {
        System.out.printf("I gave you $%d/n", money);
        money = 0;

    }

    private static void actionFill() {
        Scanner scanner = new Scanner(System.in);
        System.out.println("Write how many ml of water do you want to add: ");
        water += scanner.nextInt();
        System.out.println("Write how many ml of milk do you want to add: ");
        milk += scanner.nextInt();
        System.out.println("Write how many grams of coffee beans do you want to add: ");
        coffeeBeans += scanner.nextInt();
        System.out.println("Write how many disposable cups of coffee do you want to add: ");
        cups += scanner.nextInt();
        scanner.close();
    }

    private static String actionBuy() {
        System.out.println("What do you want to buy?  1 - espresso, 2 - latte, 3 - cappuccino: ");
        Scanner scanner = new Scanner(System.in);
        String selection = scanner.next();
        scanner.close();
        return selection;
    }

    private static void buy(String selection) {

        if (selection.equalsIgnoreCase("1")) {
            buyEspresso();
        } else if (selection.equalsIgnoreCase("2")) {
            buyLatte();
        } else if(selection.equalsIgnoreCase("3")){
            buyCappuccino();
        }else {
            return;
        }



    }

    private static void buyEspresso() {


        if (water <= ESPRESSO.water) {
            System.out.println("Sorry not enough water");
        } else if (coffeeBeans <= ESPRESSO.coffeeBeans) {
            System.out.println("Sorry not enough coffee Beans");
        } else if (cups <= 1) {
            System.out.println("Sorry not enough cups");
        } else {
            System.out.println("I have enough resources, making you a coffee!");
            water -= ESPRESSO.water;
            coffeeBeans -= ESPRESSO.coffeeBeans;
            cups--;
            money += ESPRESSO.money;
        }

    }

    private static void buyLatte() {
        if (water <= LATTE.water) {
            System.out.println("Sorry not enough water");
        } else if (coffeeBeans <= LATTE.coffeeBeans) {
            System.out.println("Sorry not enough coffee Beans");
        } else if (cups <= 1) {
            System.out.println("Sorry not enough cups");
        } else if (milk <= LATTE.milk) {
            System.out.println("Sorry not enough milk");
        } else {
            System.out.println("I have enough resources, making you a coffee!");
            water -= LATTE.water;
            coffeeBeans -= LATTE.coffeeBeans;
            cups--;
            money += LATTE.money;
            milk -= LATTE.milk;
        }
    }


    private static void buyCappuccino() {
        if (water <= CAPPUCCINO.water) {
            System.out.println("Sorry not enough water");
        } else if (coffeeBeans <= CAPPUCCINO.coffeeBeans) {
            System.out.println("Sorry not enough coffee Beans");
        } else if (cups <= 1) {
            System.out.println("Sorry not enough cups");
        } else if (milk <= CAPPUCCINO.milk) {
            System.out.println("Sorry not enough milk");
        } else {
            System.out.println("I have enough resources, making you a coffee!");
            water -= CAPPUCCINO.water;
            coffeeBeans -= CAPPUCCINO.coffeeBeans;
            cups--;
            money += CAPPUCCINO.money;
            milk -= CAPPUCCINO.milk;
        }
    }


}
Code:
Exception in thread "main" java.util.NoSuchElementException
    at java.base/java.util.Scanner.throwFor(Scanner.java:937)
    at java.base/java.util.Scanner.next(Scanner.java:1478)
    at machine.CoffeeMachine.startEngine(CoffeeMachine.java:45)
    at machine.CoffeeMachine.main(CoffeeMachine.java:36)
 

LimDul

Top Contributor
Einen scanner, der System.in liest, darfst du nie schließen. In actionFill machst du genau das.

Dadurch wird System.in geschlossen und dann knallt es beim nächsten Versuch davon zu lesen.
 

DrPils

Bekanntes Mitglied
Sehr gut danke, das wars. Ich hatte mal aufgeschnappt Scanner sollte man immer schließen. Scheint wohl nicht zu stimmen...
Ich dachte auch da ich in jedem Schleifendurchlauf einen neuen erstelle, sei dies kein Problem
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
onlyxlia Anzahl Random Zahlen mit Scanner abfragen und in Array speichern Java Basics - Anfänger-Themen 10
M Scanner Input mit if überprüfen Java Basics - Anfänger-Themen 5
D Scanner Java Basics - Anfänger-Themen 2
T scanner nicht erkannt Java Basics - Anfänger-Themen 3
T scanner eingaben erkennen und umtauschen Java Basics - Anfänger-Themen 4
Ostkreuz Int Scanner auf Enter Eingabe prüfen Java Basics - Anfänger-Themen 4
H Scanner nextLine() bringt Dateipfad Java Basics - Anfänger-Themen 1
Jul1n4tor Scanner error bei Eingabe die kein Integer ist Java Basics - Anfänger-Themen 4
Jul1n4tor Programm mit Scanner und If-Statements Java Basics - Anfänger-Themen 2
I Scanner Loop Java Basics - Anfänger-Themen 1
J Scanner cannot be resolved to a type Java Basics - Anfänger-Themen 3
C Scanner und If-Anweisung in Kombi Java Basics - Anfänger-Themen 3
X Erste Schritte Scanner eingabe wird übersprungen Java Basics - Anfänger-Themen 4
T j.u.Scanner(Sys.in).nextLine() wieder schließen? Java Basics - Anfänger-Themen 5
J Erste Schritte Scanner Java Basics - Anfänger-Themen 4
P Mit dem Scanner Klassen aufrufen Java Basics - Anfänger-Themen 3
javapingu Endlosschleife bei User Input mit try Scanner Java Basics - Anfänger-Themen 7
C Problem mit mehreren Methoden + Scanner Java Basics - Anfänger-Themen 5
Poppigescorn Arrayliste Mittels Scanner erweitern Java Basics - Anfänger-Themen 6
Jan_x8 Timer/Scanner Java Basics - Anfänger-Themen 5
M Scanner Klasse Java Basics - Anfänger-Themen 4
W Objekte über Scanner Input; ToString Probleme... Java Basics - Anfänger-Themen 4
F Erste Schritte java.util.Scanner: Beliebig langen Text per Paste in Console eingeben ? Java Basics - Anfänger-Themen 14
H Quellcode Scanner Klasse Java Basics - Anfänger-Themen 2
N java.util.InputMismatchException Fehler Java Scanner Java Basics - Anfänger-Themen 5
S Scanner soll Groß-/ Kleinschreibung ignorieren Java Basics - Anfänger-Themen 2
Y Wie kann ich Konsoleneingaben durch den Scanner mit JUnit 4 testen? Java Basics - Anfänger-Themen 1
J Scanner-Klasse Java Basics - Anfänger-Themen 2
B Scanner-If/else kleine Abhebungs-Simulation Java Basics - Anfänger-Themen 3
A Scanner Befehl Java Anfänger Java Basics - Anfänger-Themen 8
G Scanner nutzen und Index auslesen Java Basics - Anfänger-Themen 8
N Problem mit Scanner Java Basics - Anfänger-Themen 2
V Ersätze für Java-Scanner Java Basics - Anfänger-Themen 9
P Methode die eigentlich einen Scanner benötigt mit toString() Java Basics - Anfänger-Themen 5
A Scanner-Error Java Basics - Anfänger-Themen 8
D Java Scanner Java Basics - Anfänger-Themen 9
M String in Scanner einlesen Java Basics - Anfänger-Themen 6
N Eingabe Kommazahlen über Scanner Java Basics - Anfänger-Themen 2
ZH1896ZH Verstehe verschieden Scanner und hasNext() nicht ganz Java Basics - Anfänger-Themen 2
O Mehrfache Scanner-Eingabe durch Komma getrennt Java Basics - Anfänger-Themen 6
I Scanner auf 10 Stellen begrenzt? Java Basics - Anfänger-Themen 5
B Barcode Scanner Java Basics - Anfänger-Themen 3
V Wie lasse ich die for-Schleife so oft laufen wie per Scanner angegeben? Java Basics - Anfänger-Themen 3
L Scanner schließen in While-Schleife? Java Basics - Anfänger-Themen 2
S Scanner Java Basics - Anfänger-Themen 36
S Frage zu Scanner Java Basics - Anfänger-Themen 3
cpt.Tomato Scanner problem mit Passwort Login Java Basics - Anfänger-Themen 3
O Scanner Klasse Java Basics - Anfänger-Themen 8
M java.util.scanner Fehler Java Basics - Anfänger-Themen 5
B mehrere Werte mit scanner und while schleife einlesen, max berechnen bzw addieren Java Basics - Anfänger-Themen 2
W Eclipse Che Scanner Java Basics - Anfänger-Themen 8
H Vererbung Static Scanner Objekt verwenden - von StdIn in einer importierten Klasse lesen Java Basics - Anfänger-Themen 10
X Erste Schritte Problem mit scanner Java Basics - Anfänger-Themen 2
A Scanner.useLocale(Locale.US); Java Basics - Anfänger-Themen 4
M Datei einlesen mit Scanner funktioniert nicht (FileNotFoundException) Java Basics - Anfänger-Themen 6
I Scanner und Arrays Java Basics - Anfänger-Themen 2
M Scanner-Eingabe nach gewissem Zeitraum überprüfen Java Basics - Anfänger-Themen 2
Neoline Methoden Scanner Methode Java Basics - Anfänger-Themen 9
E Probleme mit Scanner Java Basics - Anfänger-Themen 4
A Java Scanner Funktioniert nicht Java Basics - Anfänger-Themen 2
B Vom scanner in ein Arraylist Java Basics - Anfänger-Themen 7
L Scanner Ausgabe Java Basics - Anfänger-Themen 37
S Zeilenumbruch mit Scanner erkennen Java Basics - Anfänger-Themen 9
O Erste Schritte Scanner mehrere male benutzen (Konsole) Java Basics - Anfänger-Themen 7
W Wie arbeite ich mit dem Typ Scanner? Java Basics - Anfänger-Themen 5
J Input/Output Scanner Input als etwas einsetzen Java Basics - Anfänger-Themen 3
R CMDTools Scanner Fehler Java Basics - Anfänger-Themen 10
D nextInt() nicht für Scanner definiert? Java Basics - Anfänger-Themen 2
N Operatoren Suchen nach einer bestimmten Eingabe (durch Scanner) Java Basics - Anfänger-Themen 7
F Scanner Problem Java Basics - Anfänger-Themen 8
T Variablen Array mit Scanner befüllen Java Basics - Anfänger-Themen 6
C Java Scanner einlesen von txt Dokument InputMismatch Java Basics - Anfänger-Themen 9
b1ck Scanner schließen, erneute Verwendung Java Basics - Anfänger-Themen 12
F Scanner - nextLine() gibt leeren String zurück Java Basics - Anfänger-Themen 2
T Problem mit Scanner. Java Basics - Anfänger-Themen 4
J Methode über Scanner aufrufen Java Basics - Anfänger-Themen 15
J Erste Schritte Scanner negative zahl einlesen und verwenden. Java Basics - Anfänger-Themen 6
W Methoden Probleme mit der Scanner Methode Java Basics - Anfänger-Themen 2
Silvascus Scanner Problem Java Basics - Anfänger-Themen 5
W Erste Schritte import java.util.scanner funktioniert nicht Java Basics - Anfänger-Themen 2
TheMenox Error bei Scanner - woher? Java Basics - Anfänger-Themen 14
D Fehler bei String eingabe via Scanner Java Basics - Anfänger-Themen 6
F Problem do while Schleife und Scanner Java Basics - Anfänger-Themen 2
O POI Apache sheet scanner Java Basics - Anfänger-Themen 1
A regulären Ausdruck mit Hilfe der Klasse Scanner in einem String finden Java Basics - Anfänger-Themen 2
F Array mit Scanner-Werten Java Basics - Anfänger-Themen 4
M Input/Output Scanner schließt nicht Java Basics - Anfänger-Themen 2
M Scanner class Java Basics - Anfänger-Themen 6
K Mit Scanner aus einer txt Datei lesen und jede Person mit name, vorname, geburtsdatum speichern Java Basics - Anfänger-Themen 5
S Array mit "foreach"-Schleife und nextInt (aus Scanner) beschreiben Java Basics - Anfänger-Themen 6
G Strings mit Scanner (nextLine) einlesen Java Basics - Anfänger-Themen 7
Q Scanner auf eine Zahl beschränken Java Basics - Anfänger-Themen 2
S Sonderzeichen '|' (u007C) mit Scanner einlesen Java Basics - Anfänger-Themen 1
T Scanner lässt sich nicht importieren Java Basics - Anfänger-Themen 1
R scanner in String funktioniert nicht Java Basics - Anfänger-Themen 1
P scanner ein Double einlesen Java Basics - Anfänger-Themen 10
A InputMismatchException mit Scanner Java Basics - Anfänger-Themen 6
J scanner, String einlesen und vergleichen Java Basics - Anfänger-Themen 3
B Input/Output Scanner-Probleme bei String-Lesen Java Basics - Anfänger-Themen 3
P Variablen Abfangen von eingaben per java.util.Scanner und weiter Verarbeitung Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben