gpt4 book ai didi

java - 在静态环境中引用非静态数组列表?

转载 作者:行者123 更新时间:2023-12-02 01:38:52 24 4
gpt4 key购买 nike

我大约一个月前才开始学习Java,现在遇到了“无法从静态上下文引用非静态变量studentList”的问题。我正在尝试使用与 main 不同的方法来填充学生列表,而不是从 addStudent 为每个学生复制粘贴内容;但我无法获取写入 ArrayList 的方法。 (错误:(14, 27)java:无法从静态上下文引用非静态变量studentList)。我知道数组不是静态的,因为它的大小未定义,但我怎样才能让它按原样工作呢?有没有更好的方法?我可以让数组成为 main 方法的一部分,然后将其传递给 addStudent,如果可以的话如何?

import java.util.ArrayList;

public class Main {
ArrayList<Student> studentList = new ArrayList<>();

public static void main(String []args) {
addStudent("Adam", "Goldsmith", 70, 50);
addStudent("John", "Smith", 20, 40);
addStudent("Lewis", "Peterson", 90, 85);

for (Student obj: studentList){
System.out.println("Name: " + obj.studentForename + " "+ obj.studentSurname);
}
}

public static void addStudent(String forename, String surname, int coursework, int test) {
Student newStudent = new Student(forename, surname);
newStudent.setForename(forename);
newStudent.setSurname(surname);
newStudent.averageMark(70, 65);

studentList.add(newStudent);
}

}

和我的“学生”类:

public class Student {
String studentForename;
String studentSurname;

public Student(String studentForename, String studentSurname) {
setForename(studentForename);
setSurname(studentSurname);
}

// Set forename.
public void setForename(String newForename) {studentForename = newForename;}

// Set surname.
public void setSurname(String newSurname) {studentSurname = newSurname;}

//
public double averageMark(int courseworkMark, int testMark){
return (courseworkMark+testMark)/2;
}

// Grab the forename
public String grabForename(){
return studentForename;
}

// Grab the surname
public String grabSurname(){
return studentSurname;
}

// Grab the full name
public String grabFullName(){
return studentForename + "" + studentSurname;
}
}

最佳答案

您的代码应该如下所示,尤其是使用 java encapsulation 的 Student 类

public class Student {

private String studentForename;
private String studentSurname;
private int courseworkMark;
private int testMark;

public Student(String studentForename, String studentSurname, int courseworkMark, int testMark) {
this.studentForename = studentForename;
this.studentSurname = studentSurname;
this.courseworkMark = courseworkMark;
this.testMark = testMark;
}
public void setStudentForename(String studentForename) {
this.studentForename = studentForename;
}
public String getStudentSurname() {
return studentSurname;
}
public void setStudentSurname(String studentSurname) {
this.studentSurname = studentSurname;
}
public String getStudentForename() {
return studentForename;
}
public double averageMark(){
return (this.courseworkMark + this.testMark)/2;
}
public String grabFullName(){
return studentForename + " " + studentSurname;
}
}

然后通过您的主类进行测试:

public class Main {    
public static void main(String []args) {
ArrayList<Student> studentList = new ArrayList<>();
studentList.add(new Student("Adam", "Goldsmith", 70, 50));
studentList.add(new Student("John", "Smith", 20, 40));
studentList.add(new Student("Lewis", "Peterson", 90, 85));

for (Student obj: studentList){
System.out.println("Name: " + obj.getStudentForename() + " "+ obj.getStudentSurname());
}
}
}

关于java - 在静态环境中引用非静态数组列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54765620/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com