我有以下代码,它一直给我错误。这个特殊错误是“这种元素异常”。我放了一个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 :(得分:0)
虽然目前还不清楚你到底想要做什么,但我建议更换
while (sc.hasNext()) {
带
while (sc.hasNextInt()) {
答案 1 :(得分:0)
您无需致电sc.nextLine();
前往下一行。
相反,sc.nextLine();
返回(并跳过)当前行的其余部分。您可能只是需要删除此调用。
当到达行尾时,Scanner
会自动进入下一行,因为Scanner
知道您对换行符不感兴趣。
答案 2 :(得分:0)
内部kind = sc.next()
不安全。你必须先检查hasNext()。