线程“主”java.util.NoSuchElementException扫描程序中的异常通过文本文件读取

问题描述:

我试图在我的程序中实现扫描程序搜索文本文件,直到找到与它正在搜索的字符串相同的行。 我不断收到以下错误:线程“主”java.util.NoSuchElementException扫描程序中的异常通过文本文件读取

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) 

扫描仪的代码是:

如果(ans.equals( “A”)){ 用户名= JOptionPane.showInputDialog(NULL,“输入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"); 
    } 
} 

以及类的完整代码是:

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

你的意思是'用户= scFile.next();'是'用户= scLine.next()'?现在我看不到你在哪里使用它,如果你每次调用'scFile.next'两次都没有检查你可能会遇到I/O错误。 –

+0

要检查的代码是什么?这是我改变的代码: –

+0

你能替换'user = scLine.next()'并且看它是否工作吗? –

您的while条件的问题。

如果到达文件的末尾没有找到用户名,的flse值仍然会0,使循环条件进行评估true,这意味着你将达到scFile.nextLine()调用,这将导致一个NoSuchElementException因为你已经到达文件的末尾。

您需要更改条件是:

scFile.hasNext() && flse == 0