这种元素异常没有明显的原因

时间:2014-11-03 11:02:08

标签: java exception-handling error-handling

我有以下代码,它一直给我错误。这个特殊错误是“这种元素异常”。我放了一个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)

提前致谢

3 个答案:

答案 0 :(得分:0)

虽然目前还不清楚你到底想要做什么,但我建议更换

 while (sc.hasNext()) {

 while (sc.hasNextInt()) {

答案 1 :(得分:0)

您无需致电sc.nextLine();前往下一行。

相反,sc.nextLine();返回(并跳过)当前行的其余部分。您可能只是需要删除此调用。

当到达行尾时,Scanner会自动进入下一行,因为Scanner知道您对换行符不感兴趣。

答案 2 :(得分:0)

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