为什么System.out.println(“\ t”+ scanner.next());给错误?

时间:2014-02-02 15:47:29

标签: java java.util.scanner println

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();

,否则会导致错误

这是我的一个作业,它不需要我有这个错误线,但我只是好奇它是什么原因以及我该如何解决它?

4 个答案:

答案 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
    }