2014-11-01 58 views
1

有人可以帮我看看问题是什么。我意识到使用 String kind = sc.next(); 可能会带来问题。如果这是问题,我该如何解决它。先谢谢你。这是代码。使用扫描器时发生Java异常错误

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) 
+0

如果在什么'AccountNumber.fromString不匹配输入(sc.nextLine())' ? – 2014-11-01 05:43:45

+0

String kind = sc.next();什么是第14行? – smushi 2014-11-01 05:44:04

+0

@smushi行11 – 2014-11-01 05:48:52

回答

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")));