我正在尝试阅读包含学生记录(名字,姓氏和成绩)的文件。 我编写了一个简单的代码来完成此任务,但是从文本文件中读取两行后代码失败了。这是我的代码:
public class Student {
private final String first,last;
final int MAXGRADE = 100;
final int LOWGRADE = 0;
private final int grade;
public Student(String firstname,String lastname, int grade){
this.first = firstname;
this.last = lastname;
this.grade = grade;
}
@Override
public String toString(){
return first + " " + last + "\t" + grade;
}
}
并且驱动程序具有此代码
public class driver {
public static void main(String[] args) throws FileNotFoundException {
String first_name ,last_name;
int grade;
Scanner fileInput = new Scanner(new File("data1.txt"));
while (fileInput.hasNextLine())
{
first_name = fileInput.next();
last_name = fileInput.next();
grade = fileInput.nextInt();
Student st = new Student(first_name, last_name,grade);
System.out.println(st);
}
}
}
编译器指向此
grade = fileInput.nextInt();
作为错误的来源。
答案 0 :(得分:1)
这段代码对我有用。确定
答案 1 :(得分:0)
从您发布的评论“ @AxelH每行代表一个学生的姓名和成绩”我们可以看到问题。
你读取一行的实际循环
while (fileInput.hasNextLine())
{
first_name = fileInput.next();
last_name = fileInput.next();
grade = fileInput.nextInt();
Student st = new Student(first_name, last_name,grade);
System.out.println(st);
}
正在阅读3行,每fileInput.nextXXX();
一行。你需要做的是
String
:`String line = fileInput.nextLine(); 编辑:
我犯了一个错误,因为我习惯使用nextline
而不是next
,我无法删除答案,因为它被接受所以我会更新它以更正确而不更改内容。
代码确实是正确的,next
将采用以下输入直到下一个分隔符\\p{}javaWhitespace}+
,但使用给定的解决方案将为您提供更多解决方案来管理组合名称Katrina Del Rio 3
.canvas svg {position:absolute; top:0; left:0; width:860px; height:860px; overflow: hidden;}
1}}。
答案 2 :(得分:0)
如果您使用 Java 8 ,那么执行此操作的功能方式是:
String filePath = "C:/downloads/stud_records.txt"; // your file path
/*
* Gives you a list of all students form the file
*/
List<Student> allStudentsFromFile = Files.lines(Paths.get(filePath)).map(line -> {
String[] data = line.split("\\s+"); //Split on your delimiter
Student stud = new Student(data[0], data[1], Integer.parseInt(data[2]));
return stud;
}).collect(Collectors.toList());
注意:我已经假设这个:
FirstName LastName等级
是输入文件格式。