안녕하세요 저는이 프로그램에 문제가있어 학생 정보를 Student
유형의 객체에 저장해야합니다. 저장된 정보 : 성, 등급 및 표. 투표는 ArrayList
(Integer
)에 저장됩니다. Student
유형의 새 개체를 만들 때마다 Student
유형의 ArrayList
(학교의 모든 학생을 저장함)에 추가하면 이전에 만든 Student
개체에 입력 한 새 투표 수가 계속 추가됩니다 ArrayList
에 저장됩니다.객체에 ArrayList 전달
예 : 나는 다른 추가 프레디, 5B 및 123 : 나는이 Student
학생들 ArrayList
에, 내가 입력 프레디, 5b에주고 123 다음 내가 학생들 ArrayList
을 확인하고는 내가 이미 추가 한 학생이 포함되어 추가 학생 제가 입력 한 조쉬, 4t 및 1234에 문의하십시오.
ArrayList
에 이미 생성되어 저장되어있는 객체가 수정되는 이유는 무엇입니까? 어떻게 해결할 수 있습니까?
public class Student {
private String lastname;
private String grade; // example "4b"
private ArrayList<Integer> student_votes;
public Student(String lastname, String grade, ArrayList<Integer> student_votes) {
this.lastname=lastname;
this.grade=grade;
this.student_votes=student_votes;
}
public ArrayList getVotes() {
return student_votes;
}
public String getLastname() {
return lastname;
}
public String getGrade() {
return grade;
}
public String toString() {
return lastname+" "+grade+" "+getVotes();
}
public void print_student (Student student) {
System.out.println(student);
}
public static void print_students(ArrayList<Student> students) {
for(Student s : students) {
System.out.print(s);
}
System.out.println("");
}
public static void menu() {
System.out.println("\nPress 1 to add a student\nPress 2 to remove a student\nPress 3 to print the classroom\nPress 4 to exit");
}
public static void main(String[] args) {
int choice, nv=0, i=0,average=0;
Boolean exit=false;
ArrayList<Student> students = new ArrayList<Student>();
ArrayList<Integer> votes = new ArrayList<Integer>();
String lastname = new String();
String grade = new String();
Scanner sc = new Scanner(System.in);
Scanner st = new Scanner(System.in);
do {
menu();
choice=sc.nextInt();
switch (choice) {
case 1: System.out.println("Enter your lastname:");
lastname=st.nextLine();
System.out.println("Enter your grade:");
grade=st.nextLine();
System.out.println("Enter the amount of votes");
nv=sc.nextInt();
for(i=0;i<nv;i++) {
System.out.println("Enter vote n:"+(i+1));
votes.add(sc.nextInt());
}
students.add(new Student(lastname,grade,votes));
System.out.println("student added!");
break;
case 2: System.out.println("Enter student position: ");
nv = sc.nextInt();
students.remove(nv-1);
break;
case 3: print_students(students);
break;
case 4: exit = true;
}
} while (exit==false);
}
}
왜 스캐너가 두 개입니까? 하나만 사용하고 동일한 목표를 달성 할 수 있습니다. –
모든 학생에게 같은 목록 개체를 설정하고 있습니다. 다른 내용을 원한다면 별도로 구성해야합니다. – shmosel
@shmosel 그래서 모든 학생들에게 arraylist를 만들어야합니까? 그것을 피할 수있는 방법이 있습니까? – BlueJay