NoSuchElementException

Henry939

Aktives Mitglied
Folgendes Problem tritt auf, wenn ich versuche die Methode improveSkills() des Player-Objekts zu verlassen:

Code:
[1] wisdom    100
[2] fortune   100
[3] leave     
input: 3
[1] show character
[2] calculate
[3] improving skills
input: Exception in thread "main" java.util.NoSuchElementException
   at java.util.Scanner.throwFor(Scanner.java:862)
   at java.util.Scanner.next(Scanner.java:1371)
   at Game.main(Game.java:21)

Hier sind die relevanten Teile des Codes:

Game.java
Code:
import java.util.Scanner;

public class Game
{
   
   public static void main(String[] args)
   {
       Player player = new Player();
       Scanner input = new Scanner(System.in);
       
       System.out.println("[s] save game");
       System.out.println("[l] load game");
       System.out.println("[x] kill program");
       System.out.println();
       while(true)
       {
           System.out.println("[1] show character");
           System.out.println("[2] calculate");
           System.out.println("[3] improving skills");
           System.out.print("input: ");
           String choice = input.next();
           System.out.println();
           
           if(choice.equals("1"))
               player.show();
           else if(choice.equals("2"))
           {
               for(int i = 0; i < 10; i++)
                   player.calculate();
               System.out.println();
           }
           else if(choice.equals("3"))
           {
               player.improve_skills();
           }
           else if(choice.equals("x"))
               break;
       }
   }
}

Auszug aus Player.java
Code:
    public void improve_skills()
   {
       Scanner input = new Scanner(System.in);
       while(true)
       {
           System.out.println("[1] wisdom    " + skills.get(0).get_price());
           System.out.println("[2] fortune   " + skills.get(1).get_price());
           System.out.println("[3] leave     ");
           System.out.print("input: ");
           int choice = input.nextInt();
           
           if(choice <= 2)
           {
               if(skills.get(choice-1).get_price() <= this.gold)
               {
                   skills.get(choice-1).increase_level();
                   this.gold -= skills.get(choice-1).get_price();
               }
               else
                   System.out.println("not enough money");
           }
           else if(choice == 3)
               break;
           
           System.out.println();
       }
       input.close();
   }

Wo liegt der Fehler?
 

Robat

Top Contributor
Deine ganzen while(true) Schleifen sehen sehr verdächtig aus.
Arbeite lieber mit while(scanner.hasNextInt()) oder while(scanner.hasNext()) je nach Anwendungsfall.
 

RalleYTN

Bekanntes Mitglied
In improve_skills() wird der Scanner geschlossen.
Damit wird auch System.in geschlossen.
Alles was dann noch Daten aus System.in ziehen möchte wirft Fehler.
 

Ähnliche Java Themen

Neue Themen


Oben