sectionScan = new Scanner(wholeLine);
sectionScan.useDelimiter(",");
//Print each part of bat code
while (sectionScan.hasNext())
{
System.out.println("\t" + sectionScan.next());
score = sectionScan.next();
if ("h".equals(score))
hit++;
else if ("o".equals(score))
out++;
else if ("w".equals(score))
walk++;
else if ("s".equals(score))
sacrifice++;
}
我正在运行上面的代码来扫描这样的行:
Willy Wonk,o,o,h,o,o,o,o,h,w,o,o,o,o,s,h,o,h
但除非我拿出System.out.println();
这是我的一个作业,它不需要我有这个错误线,但我只是好奇它是什么原因以及我该如何解决它?
答案 0 :(得分:0)
您正在使用println中的下一个元素。
System.out.println("\t" + sectionScan.next());
而是存储next()值一次并重复使用。
score = sectionScan.next();
System.out.println("\t" + score);
答案 1 :(得分:0)
当您执行println
时,实际上您正在调用next
方法两次,但是您只在while条件下检查一次是否还有元素。因此,每次迭代,您将检索两个元素。最后,当只剩下一个元素时,在第二次尝试调用方法next
时会出现异常。
您应该只调用一次next
方法并将值缓存到变量中,以后您可以将其用于任何其他目的。
答案 2 :(得分:0)
尝试将其更改为
score = sectionScan.next();
System.out.println("\t" + score);
你每次检查sectionscan.hasNext()时都会调用sectionscan.next()两次,这意味着当没有下一个元素时你最终会调用.next()。
答案 3 :(得分:0)
当你使用sectionScan.next();
时,它会读取下一个,
你可以像这样得到临时字符串:
String temp=sectionScan.next();
你可以做任何你想做的事情
另一种解决方案是使用split
这样的方法:
String []score=wholeLine.split(",");
所以你有一个由,
分割的数组,所以你可以像这样迭代这个数组:
for(String str:score){
//do what ever you want to do with str
}