2014-11-03 69 views
0

我得到了下面的一段代码,它不断给我错误。这个特定的错误是“这样的元素异常”。我把一个hasNext()检查,以确保这不会发生,但我仍然得到错误。该错误也指包含String kind = sc.next()的行;这样的元素异常没有明显的原因

public static Meter load(Scanner sc) { 
     MeterNumber meterNumber = MeterNumber.fromString(sc.nextLine()); 

     while (sc.hasNext()) { 
     int n = sc.nextInt(); 
     sc.nextLine(); 
     Tariff[] tariffs = new Tariff[n]; 
     for (int i = 0; i < n; i++) { 
     String kind = sc.next(); 
     sc.nextLine(); 
     if (kind.equals("P")) { 
      tariffs[i] = PeakTariff.PEAK_TARIFF; 
     } else if (kind.equals("O")) { 
      tariffs[i] = OffPeakTariff.OFF_PEAK_TARIFF; 
     } 
     } 

     return new Meter(meterNumber, tariffs); 

     } 
     return null; 
    } 

我有一个主要方法,通过它我试图调用上述方法。

public class Testt { 

    public static void main(String[] args) { 

    try { 

     Scanner sc1 = new Scanner(new java.io.File("Readings.txt")); 

     Meter.load(sc1); 
    } catch (FileNotFoundException e) { 

     e.printStackTrace(); 
    } 




    }  
} 

这是一种输入的,我有:

937 216 316 3 O 1041.1 
531 481 889 2 P 788.5 

错误。

Exception in thread "main" java.util.NoSuchElementException 
    at java.util.Scanner.throwFor(Scanner.java:862) 
    at java.util.Scanner.next(Scanner.java:1371) 
    at Meter.load(Meter.java:29) 
    at Testt.main(Testt.java:19) 

在此先感谢

+0

你能提供几行例外吗?在哪一行? – Dmytro 2014-11-03 11:09:57

+0

@Dmytro我编辑了一个包含错误 – lolian 2014-11-03 11:12:35

+0

您的文件格式与您的代码不符。首先,你的代码不断地调用'sc.nextLine',但是你的文件格式在每个数字后都没有新的行。 – 2014-11-03 11:18:42

回答

0

更换

while (sc.hasNext()) { 

你不需要拨打sc.nextLine();前进到下一行。

而是,sc.nextLine();返回(并跳过)当前行的其余部分。你可能只需要删除这个电话。

由于Scanner知道您对换行符不感兴趣,因此在到达行的末尾时,前进到下一行由Scanner自动完成。

0

尽管它不是那么清楚正是你正在尝试做的,我建议用

while (sc.hasNextInt()) { 
+0

我已编辑它。希望它更清楚一点。 – lolian 2014-11-03 11:12:59

0

内部kind = sc.next()是不安全的。你必须先检查hasNext()。