-2

Ich versuche in meinem Programm zu implementieren, dass Scanner durch eine Textdatei durchsucht, bis es eine Zeile findet, die mit dem String identisch ist, nach dem es sucht. Ich halte die folgende Fehlermeldung erhalten:Ausnahme im Thread "Haupt" java.util.NoSuchElementException Scanner Beim Lesen einer Textdatei

Exception in thread "main" java.util.NoSuchElementException 
    at java.util.Scanner.throwFor(Scanner.java:862) 
    at java.util.Scanner.next(Scanner.java:1371) 
    at hangman.HangmanArr.<init>(HangmanArr.java:62) 
    at hangman.HangmanApp.main(HangmanApp.java:18) 

der Code für den Scanner ist:

if (ans.equals ("A")) { username = JOptionPane.showInputDialog (null, „Enter usesrname : "," Login 1/2 ", JOptionPane.QUESTION_MESSAGE);

try { 
     Scanner scFile = new Scanner(new File("TextFileB.txt")); 

     String line = scFile.nextLine(); 
     int flse = 0; 
     String user = " "; 

     while (scFile.hasNext() || flse == 0) { 
      line = scFile.nextLine(); 
      Scanner scLine = new Scanner(line).useDelimiter("#"); 
      user = scFile.next(); 
      if (user.equals(username)) { 
       password = JOptionPane.showInputDialog(null, "Welcome " + username + ". \n Please enter your password to play", "Login 2/2", JOptionPane.QUESTION_MESSAGE); 
       flse++; 

      } 

     } 
     scFile.close(); 

    } catch (IOException i) { 
     System.out.println("Text File could not be found"); 
    } 
} 

und der vollständige Code für die Klasse ist:

package hangman; 

import java.io.*; 
import javax.swing.*; 
import java.util.*; 

/** 
* 
* @author ghost 
*/ 
public class HangmanArr { 

    String letter; 
    int x = 0; 
    String word; 
    String dashWord; 
    String newWord; 
    String username; 
    String password; 
    private Hangman[] arrUsers = new Hangman[100]; 

    public HangmanArr() { 
     JOptionPane.showInputDialog(null, "The aim of Hangman is to form " 
       + "a word \nby guessing individual letters \nof the word " 
       + "before a" 
       + " hanging man \nand gallows are built. Every letter\n " 
       + "that is entered " 
       + "which does not \nappear in the word will contribute to " 
       + "\nthe hanging" 
       + " man and gallows; by adding \na single component to " 
       + "drawing – \nif the hanging " 
       + "man and gallows are \ncomplete before guessing the " 
       + "complete word;\n you have lost " 
       + "the game. Goodluck!" + "\nPress Enter to continue", "H_NGM_N", JOptionPane.INFORMATION_MESSAGE); 
     String ans = " "; 

     ans = JOptionPane.showInputDialog(null, "Please enter an option of " 
       + "your choice\n" 
       + "A – login\n" 
       + "B - Sign up\n" 
       + "C - Scoreboard\n" 
       + "D - quit", "Menu A", JOptionPane.QUESTION_MESSAGE).toUpperCase(); 

     if (ans.equals("A")) { 
      username = JOptionPane.showInputDialog(null, "Enter usesrname:", "Login 1/2", JOptionPane.QUESTION_MESSAGE); 

      try { 
       Scanner scFile = new Scanner(new File("TextFileB.txt")); 

       String line = scFile.nextLine(); 
       int flse = 0; 
       String user = " "; 

       while (scFile.hasNext() || flse == 0) { 
        line = scFile.nextLine(); 
        Scanner scLine = new Scanner(line).useDelimiter("#"); 
        user = scFile.next(); 
        if (user.equals(username)) { 
         password = JOptionPane.showInputDialog(null, "Welcome " + username + ". \n Please enter your password to play", "Login 2/2", JOptionPane.QUESTION_MESSAGE); 
         flse++; 

        } 

       } 
       scFile.close(); 

      } catch (IOException i) { 
       System.out.println("Text File could not be found"); 
      } 
     } 


     if (ans.equals("B")) { 
      username = JOptionPane.showInputDialog(null, "Enter usesrname:", "Sign Up 1/2", JOptionPane.QUESTION_MESSAGE); 
      password = JOptionPane.showInputDialog(null, "Welcome " + username + ". \n Please enter your password to play", "Sign Up 2/2", JOptionPane.QUESTION_MESSAGE); 
      File add = new File("TextFileB.txt"); 
      try { 
       PrintWriter fw = new PrintWriter(new FileWriter(add, true)); 
       fw.write(username + "#" + password + "#"); 
       fw.println(); 
       fw.close(); 
      } catch (IOException e) { 
       System.out.println("Could not locate text file to store data"); 
      } 
     } 
    } 
} 
+1

Sie meinen Sie 'user = scFile.next();' 'user = scLine.next()' sein? Im Moment sehe ich nicht, wo Sie es verwenden, und wenn Sie 'scFile.next' zweimal aufrufen, ohne jedes Mal zu überprüfen, können Sie einen E/A-Fehler feststellen. –

+0

Was wäre der zu überprüfende Code? Dies ist mein geänderter Code: –

+0

Können Sie ersetzen 'user = scLine.next()' und sehen, ob es funktioniert? –

Antwort

0

Sie haben ein Problem in Ihrem while Zustand.

Wenn Sie das Ende der Datei, ohne die Benutzername zu finden, zu erreichen, wird der Wert von flse noch 0 sein, so dass die Schleifenbedingung true ausgewertet werden, was bedeutet, dass Sie den scFile.nextLine() Anruf erreichen, die in einem NoSuchElementException führen werden, weil Sie haben das Ende der Datei erreicht.

Sie müssen diesen Zustand ändern zu sein:

scFile.hasNext() && flse == 0 
Verwandte Themen