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)这些是私人成员。您不能仅从主服务器访问它们。