使用Scanner时出现Java异常错误

时间:2014-11-01 05:41:33

标签: java error-handling

有人可以帮我看看问题所在。我意识到使用     String kind = sc.next(); 可能会带来问题。如果这是问题我该如何解决它。先感谢您。这是代码。

import java.io.*;
import java.util.*;

public abstract class Account {

protected static AccountNumber accountNumber; 
protected Customer customer = null; // not to be used yet

public abstract MeterNumber[] getMeterNumbers();
public abstract boolean exists(String meterNumber, String tariff);

public static Account load(Scanner sc) {
   while (sc.hasNextLine()) {
       AccountNumber accountNumber = AccountNumber.fromString(sc.nextLine());
       String kind = sc.next();
       sc.nextLine();
       if (kind.equals("D")) {
           return new DomesticAccount(sc, accountNumber);
       }   else {
               return new CommercialAccount(sc, accountNumber);
           }
      }    {
               return null;
           }
   }

}

主要代码如下。

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;
import java.util.TreeSet;


public class Testt {

    public static void main(String[] args) {


        Account.load(new Scanner("Accounts3.txt"));

        Map <AccountNumber, String> map1 = new HashMap <AccountNumber, String>();

        map1.put(Account.accountNumber, "hello");

        System.out.println(map1);

    }   
}  

这是我得到的错误。

Exception in thread "main" java.util.NoSuchElementException
    at java.util.Scanner.throwFor(Scanner.java:862)
    at java.util.Scanner.next(Scanner.java:1371)
    at Account.load(Account.java:20)
    at Testt.main(Testt.java:14)

1 个答案:

答案 0 :(得分:0)

您正在字符串对象上创建扫描程序。这只是“Accounts3.txt”。这只是一行。

http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html#Scanner(java.lang.String)

我认为你需要在档案上创建扫描仪。

参考:

http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html#Scanner(java.io.File)

所以你的主要方法会像这样创建扫描器:

Account.load(new Scanner(new java.io.File("Accounts3.txt")));