Whenever I create multiple students, add them to the studentclass Hashtable, and try to print the hashtable(or perform any action on it) it only holds the last Student entered.
EX: Created Students: John Taylor, Timmy Turner, Optimus Prime PrintHastable: {6=Optimus Prime ,4=Optimus Prime, 2=Optimus Prime}
How can I get the hashtable to hold all entered values as opposed to just the last one?
School Class public class School{
//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 Class
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);
}
}
Student Class
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;
}
There are couple of things that are wrong about your approach.
Many more improvements can be made on this code. But I am adding a quick fix here.
TestMain.java
public class TestMain {
public static void main(String args[]) {
addStudent();
}
private static Long counter = (long) 1;
private static Hashtable<Long, Student> studentclass = new Hashtable<Long, Student>();
public static void addStudent() {
boolean addanotherstudent = true;
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();
}
String lname = "";
while (lname.length() <= 0) {
Scanner key1 = new Scanner(System.in);
System.out.print("What is your last name? ");
lname = key1.nextLine();
}
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();
}
long accountId = counter;
String studentId = fname + lname + accountId;
Student student = new Student(fname, lname, studentId, accountId, grade);
studentclass.put(counter, new Student(fname, lname, studentId, accountId, grade));
counter++;
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;
}
}
System.out.println(studentclass);
}
}
Student.java
public class Student {
private String fname;
private String lname;
private String sid;
private long aid;
private double grade;
public Student(String fname, String lname, String sid, long aid, double grade) {
this.fname = fname;
this.lname = lname;
this.sid = sid;
this.aid = aid;
this.grade = grade;
}
public String getFname() {
return fname;
}
public void setFname(String fname) {
this.fname = fname;
}
public String getLname() {
return lname;
}
public void setLname(String lname) {
this.lname = lname;
}
public String getSid() {
return sid;
}
public void setSid(String sid) {
this.sid = sid;
}
public long getAid() {
return aid;
}
public void setAid(long aid) {
this.aid = aid;
}
public double getGrade() {
return grade;
}
public void setGrade(double grade) {
this.grade = grade;
}
@Override
public String toString() {
return "Student{" +
"fname='" + fname + '\'' +
", lname='" + lname + '\'' +
", sid='" + sid + '\'' +
", aid=" + aid +
", grade=" + grade +
'}';
}