我有一个从文件中读取输入的程序。我试图将输入分隔为仅在逗号后返回令牌。但它似乎没有用。到目前为止,这是我的代码:
package usegradebook;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class GradeBook {
private static Object[][] studentRecords = new Object[8][8];
public void compileRecord() throws FileNotFoundException
{
File file = new File("SomeData.txt");
Scanner input = new Scanner(file);
input.useDelimiter(",");
for(int row = 0; row < studentRecords.length; row++)
{
for(int column = 0; column < studentRecords[row].length; column++)
{
studentRecords[row][column] = input.next();
}
}
input.close();
}
以下是数据: LastName,FirstName,Exam1,Asg1,Asg2,Exam2,Asg3,Asg4 Karr,Arlen,91,86,94,100,98,93 Stotz,Ralph,81,83,93,78 Yi,Yu,99,88,101,76,90,94 Rao,Sista,91,86,94,100,98,93 克里斯托弗,托马斯,78,79,82,88,78,91 McClurg,Andrew,91,87,99,87,93 Noble,Rich,84,79,85,88,90,91 约翰逊,马克,100,100,100,100,100,100
它返回一个“线程中的异常”main“java.util.NoSuchElementException”
答案 0 :(得分:0)
不是依赖于每行只有8条记录的输入(当前你只是调用input.next()而不检查是否确实存在另一个标记),你应该使用input.hasNext()来查看它是否有另一个标记。当您收到与您期望的行不匹配的行时,这将允许您更优雅地查看,并将有助于调试此行。
请参阅http://docs.oracle.com/javase/tutorial/essential/io/scanning.html
很难从你的问题中看到输入文件的确切格式,但我怀疑那里有些错误。也许在处理过程中打印出每一行,或者在抛出异常时捕获异常然后打印该行。这将缩小输入文件的哪一位,与您的预期不符。
答案 1 :(得分:0)
问题在于输入。其中一个记录缺少1个数据。因此,当涉及到最后一条记录的最后数据时,如果没有数据,您将最终调用input.next()
。另外,请确保在调用扫描程序对象上hasNext()
之前使用next()
进行检查,这样可以防止您出现此异常。