簡體   English   中英

我需要從輸入中獲取數據並創建一個 Student 類,其中學生成績在一個數組中

[英]I need to take data from input and create a Student class with Students grades in an array

我在創建學生課程時遇到問題。 我的輸入文件是這樣的:

3 //number of exams
Audrey 7 28 1
Eddie 27 19 7
Addison 6 23 31
Stephanie 29 21 7
Laura 19 30 17

我需要用一個構造函數創建一個學生類,比如public Student(String name, int[] Student Grades)

問題是我不能創建一個有 3 個等級的學生,我需要創建:學生 Audrey 的等級為 [7, 28, 1] 或學生 1 Name Audrey Grades[ 7,28,1]

我試過但不能為第一個學生放置前 3 個變量。

我怎樣才能做到這一點?

更新我的工作:

File file = new File("info1.txt");
Scanner input = new Scanner(file);
int []grade = new int[3];
int counter = 0;
Student[] students = new Student[9];

while(input.hasNext()) {

    String Studentread= input.nextLine();
    for (int i = 0; i < grade.length; i++) {
        grade [i] = input.nextInt();
    }
    System.out.println(grade.toString());
    students[counter] = new Student(Studentread, grade);
    System.out.println(students[counter].getName() + " " + students[counter].getStudentGrades());
    counter++;

    input.close();
}

班級學生:

private String Name;
public int [] StudentGrades;

public Student(String name, int[] StudentGrades) {

this.Name = name;
    this.StudentGrades = StudentGrades;
}

public String getName() {
    return Name;
}
public void setName(String name) {
    Name = name;
}

public int[] getStudentGrades() {
    return StudentGrades;
}
public void setStudentGrades(int[] studentGrades) {
   StudentGrades = studentGrades;
}

您可以逐行讀取並使用空格分隔符將行拆分為數組。 或者按空格解析紅線。

最好使用Scanner逐行讀取文件,而不是逐個令牌。 這是因為文件中的每一行都有一個含義。 並直接匹配到Student

我對代碼進行了注釋,以便您了解每一行在做什么:

public static void main(String[] args) throws IOException {

    // read all the lines of your file
    List<String> lines = Files.readAllLines(Paths.get("info1.txt"));

    // first line is the number of exams
    int nbExams = Integer.valueOf(lines.get(0).trim());

    // remove first line, now each line is a student
    lines.remove(0);
    int nbStudents = lines.size();

    Student[] students = new Student[nbStudents];
    for(int iStudents = 0; iStudents<nbStudents; iStudents++) {
        String line = lines.get(iStudents);

        // split your line on spaces
        String[] tokens = line.split(" ");

        // first is name
        String studentName = tokens[0];

        // next are studentGrades
        int[] grades = new int[nbExams];
        for(int i=0; i<nbExams; i++) {
            grades[i] = Integer.valueOf(tokens[i+1]);
        }

        students[iStudents] = new Student(studentName, grades);
    }

    System.out.println(Arrays.toString(students));
}

筆記:

  • 始終使用小寫的變量(的第一個字母studentGrades ,不StudentGrades )。 大寫保留給類和接口
  • toString方法添加到您的學生類,以便您可以很好地打印它們
  • 由於您在構造函數中提供了所有數據,因此您不需要在Student類上使用 setter。

您的Student類應如下所示:

class Student {
    private String name;
    private int[] studentGrades;

    public Student(String name, int[] studentGrades) {
        this.name = name;
        this.studentGrades = studentGrades;
    }

    public String getName() {
        return name;
    }

    public int[] getStudentGrades() {
        return studentGrades;
    }

    @Override
    public String toString() {
        return "Student{" +
                  "name=" + name + ", " +
                  "studentGrades=" + Arrays.toString(studentGrades) +
                "}";
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM