Java 使用扫描仪读取文本文件时出现问题
我正试图从文本文件中读取数据,但无法使其正常工作。这就是我目前所拥有的Java 使用扫描仪读取文本文件时出现问题,java,class,object,Java,Class,Object,我正试图从文本文件中读取数据,但无法使其正常工作。这就是我目前所拥有的 import java.io.File; import java.io.FileNotFoundException; import java.util.*; public class Student { private String firstName; private String lastName; private int homeworkScore;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.*;
public class Student {
private String firstName;
private String lastName;
private int homeworkScore;
private int testScore;
private String letterGrade;
private int numberOfStudents;
public Student() {
numberOfStudents = 0;
homeworkScore = 0;
testScore = 0;
}
public static void main(String[] args) {
Scanner scanner = null;
try {
scanner = new Scanner(new File("grades.txt"));
} catch (FileNotFoundException e) {
System.out
.println("Error opening file. Please make sure that you have a grades.txt file in the same folder as GradeCalculator.class");
System.exit(0);
}
}
public void setNumberOfStudents() {
Scanner scanner = new Scanner(System.in);
numberOfStudents = scanner.nextInt();
}
public void setFirstName() {
Scanner scanner = new Scanner(System.in);
String firstName = scanner.next();
}
public void setLastName() {
Scanner scanner = new Scanner(System.in);
String lastName = scanner.next();
}
}
这是我到目前为止的驾驶员等级:
public class CourseGrade {
public static void main(String[] args) {
Student myStudent = new Student();
myStudent.setNumberOfStudents();
myStudent.setFirstName();
myStudent.setLastName();
}
}
当我运行驱动程序类时,什么都没有发生,所以我不确定它是否真的将值设置为我想要的值。我知道正在读取该文件,因为我没有收到错误消息,但我不确定是否实际设置了这些值,因为实际上您没有使用扫描仪遍历该文件。您所做的只是用文件初始化
扫描仪
对象
您需要执行以下操作:
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
//do stuff...
}
正如您问题的评论部分所指出的那样,扫描器
正在学生类主方法中初始化-这似乎是错误的。可以在Student上使用静态方法读取此文件并基于数据构造Student对象
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class Student {
private String firstName;
private String lastName;
private int homeworkScore;
private int testScore;
private String letterGrade;
private int numberOfStudents;
public Student() {
Scanner scanner = null;
try {
scanner = new Scanner(new File("grades.txt"));
} catch (FileNotFoundException e) {
System.out
.println("Error opening file. Please make sure that you have a grades.txt file in the same folder as GradeCalculator.class");
System.exit(0);
}
//Assumed file content is as expected
this.numberOfStudents = scanner.nextInt();
this.firstName = scanner.next();
this.lastName = scanner.next();
}
}
下面的驱动程序类将打印调用构造函数时设置的值
public class CourseGrade {
public static void main(String[] args) {
Student myStudent = new Student();
//Your requirement is done by now
}
}
好的,我成功了,我就是这么做的:
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class Student {
private String firstName;
private String lastName;
private int homeworkScore;
private int testScore;
private String letterGrade;
private int numberOfStudents;
Scanner scanner = null;
{
try {
scanner = new Scanner(new File("grades.txt"));
} catch (FileNotFoundException e) {
System.out
.println("Error opening file. Please make sure that you have a grades.txt file in the same folder as GradeCalculator.class");
System.exit(0); // Error message is shown when file is not found
}
}
public Student() {
homeworkScore = 0;
testScore = 0;
numberOfStudents = 0;
}
public void setNumberOfStudents() {
numberOfStudents = scanner.nextInt();
}
public int getNumberOfStudents() {
return numberOfStudents;
}
public void setFirstName() {
firstName = scanner.next();
}
public String getFirstName() {
return firstName;
}
public void setLastName() {
lastName = scanner.next();
}
public String getLastName() {
return lastName;
}
public void setHomeworkScore() {
}
public int getHomeworkScore() {
return homeworkScore;
}
public void setTestScore() {
}
public int getTestScore() {
return testScore;
}
}
然后当我运行这个新的驱动程序类时:
public class CourseGrade {
public static void main(String[] args) {
Student myStudent = new Student();
myStudent.setNumberOfStudents();
myStudent.setFirstName();
System.out.print(myStudent.getFirstName() + " ");
myStudent.setLastName();
System.out.print(myStudent.getLastName());
}
}
它会打印出文本文件中第一个人的名字!我仍然需要设置计算考试和家庭作业分数的方法,但现在似乎都在工作。谢谢你的帮助 你的项目中有两种主要方法,但不是fine@MikhailTimofeev你可以有多个电源。我看到的一个问题是,您正在使用局部变量
String fistName=scanner隐藏实例变量。next()
创建该方法的新局部变量。您想使用firstName=scanner.next()
,或者为了可读性,有些人使用this.firstName=scanner.next()
“我不确定它是否实际将值设置为我想要的值。”使用调试器或将值转储到System.out。对于后者,在Student
中重写Object.toString()
,这样您就可以执行System.out.println(Student)代码>这些是私人成员。您不能仅从主服务器访问它们。