这样的元素异常没有明显的原因
问题描述:
我得到了下面的一段代码,它不断给我错误。这个特定的错误是“这样的元素异常”。我把一个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)
在此先感谢
答
更换
while (sc.hasNext()) {
你不需要拨打sc.nextLine();
前进到下一行。
而是,sc.nextLine();
返回(并跳过)当前行的其余部分。你可能只需要删除这个电话。
由于Scanner
知道您对换行符不感兴趣,因此在到达行的末尾时,前进到下一行由Scanner
自动完成。
答
内部kind = sc.next()
是不安全的。你必须先检查hasNext()。
你能提供几行例外吗?在哪一行? – Dmytro 2014-11-03 11:09:57
@Dmytro我编辑了一个包含错误 – lolian 2014-11-03 11:12:35
您的文件格式与您的代码不符。首先,你的代码不断地调用'sc.nextLine',但是你的文件格式在每个数字后都没有新的行。 – 2014-11-03 11:18:42