【发布时间】:2020-07-03 12:41:01
【问题描述】:
每当我创建多个学生时,将它们添加到 studentclass 哈希表中,并尝试打印哈希表(或对其执行任何操作)它只保存最后一个输入的学生。
EX:创造的学生:约翰·泰勒、蒂米·特纳、擎天柱 PrintHastable:{6=擎天柱,4=擎天柱,2=擎天柱}
如何让哈希表保存所有输入的值,而不仅仅是最后一个?
学校班级 公开课学校{
//static Long counter = (long) 1;
public Hashtable<Long, Student> studentclass;
public void addStudent() {
studentclass = new Hashtable<Long, Student>();
boolean addanotherstudent = true;
long counter = TestMain.counter;
Student theStudent = new Student();
while(addanotherstudent) {
String fname = "";
while(fname.length() <=0) {
Scanner key = new Scanner(System.in);
System.out.print("What is your first name? ");
fname = key.next();
theStudent.setfname(fname);
}
String lname = "";
while(lname.length() <=0) {
Scanner key1 = new Scanner(System.in);
System.out.print("What is your last name? ");
lname = key1.nextLine();
theStudent.setlname(lname);
}
double grade = -1;
while(grade < 0 || grade > 4) {
Scanner key2 = new Scanner(System.in);
System.out.print("What is your GPA (0 - 4)? ");
grade = key2.nextDouble();
theStudent.setgrade(grade);
}
long accountId = counter++;
String studentId = fname + lname + accountId;
theStudent.setsid(studentId);
theStudent.setaid(accountId);
counter++;
//Student theStudents = new Student();
studentclass.put(counter, theStudent);
Scanner ask = new Scanner(System.in);
System.out.print("Do you want to add another student?(y or n) ");
String ans = ask.nextLine();
if(ans.charAt(0) == 'y' || ans.charAt(0) == 'Y') {
continue;
}else {
addanotherstudent = false;
}
}
}
TestMain 类
public class TestMain {
static long counter = 0;
//public static Hashtable<Long, Student> studentclass;
public static void main(String[] args) {
//studentclass = new Hashtable<Long, Student>();
School GSU = new School();
GSU.addStudent();
GSU.filterStudent(3);
System.out.println(GSU.studentclass);
}
}
学生班
public class Student {
private String fname;
private String lname;
private String sid;
private long aid;
private double grade;
public void setfname(String setfname) {
fname = setfname;
}
public String getfname() {
return fname;
}
public void setlname(String setlname) {
lname = setlname;
}
public String getlname() {
return lname;
}
public void setsid(String setsid) {
sid = setsid;
}
public String getsid() {
return sid;
}
public void setaid(long setaid) {
aid = setaid;
}
public long getaid() {
return aid;
}
public void setgrade(double setgrade) {
grade = setgrade;
}
public double getgrade() {
return grade;
}
public String toString() {
return fname + " " + lname;
}
【问题讨论】:
-
您的问题到底是什么?你有什么问题?
-
Student 类中的 getter 和 setter 方法不应该是静态的。在 add student 方法中,您应该创建一个 Student 对象并设置字段。然后将对象放入哈希表中。