2013-11-15 2 views
3

여기에 객체를 벡터에 추가하고 요소를 벡터에서 다시 가져 오려고합니다. for 루프 내에서 벡터는 모든 3 객체의 세부 정보를 제공합니다. 하지만 루프 외부에서 개체를 가져 오려고합니다. 그러나 세 번째 객체에 대한 정보 만 제공합니다.벡터의 모든 요소가 마지막 객체로 대체됩니다. - java

static Vector<Student> vector = null; 
static Student student= null; 
public static void AskStudentDetails(){ 
    Scanner input = new Scanner(System.in); 
    student = new Student(); 
    vector = new Vector<Student>(); 

    for(int i=0; i<MAX_STUDENT; i++){    
     System.out.print("Coursework 01 Marks : "); 
     student.setCoursework1(input.nextInt()); 

     vector.addElement(student); //add object to the vector 
     Student mm = vector.elementAt(0); 
     System.out.println(mm.getCoursework1());   
    } 
    input.close(); 
    student = vector.elementAt(1);//assign to the object student 
    System.out.println(student.getCoursework1()); // always print only the value of third object 
} 

Student.class 공용 클래스 학생은 내부 루프에 대한의 java.io.Serializable을 {

private int coursework1; 



    public int getCoursework1() { 
     return coursework1; 
    } 
    public void setCoursework1(int coursework1) { 
     this.coursework1 = coursework1; 
    } 

}

+2

매번 동일한 '학생'개체에 대한 참조를 추가하고 있습니다. 루프 안에서'student = new Student()'를 움직여 로컬 변수로 만드십시오.이 질문은 다른 많은 사람들의 속임수이지만, 지금 찾을 수있는 에너지가 없습니다 ... –

답변

1

현재 위치에서 student = new Student();를 제거하고 배치를 구현합니다.

for(int i=0; i<MAX_STUDENT; i++){ 
    student = new Student(); // Added here  
    System.out.print("Coursework 01 Marks : "); 

} 
+0

감사합니다 당신이 아주 많이. 귀하의 성원에 진심으로 감사드립니다. – Eclayaz

+0

불행히도 나는 당신의 대답에 대해 충분한 평판을 얻지 못했습니다. – Eclayaz

1

만 1 Student 개체를 만드는 당신은 벡터에 추가하십시오. 벡터에 개체를 추가한다고해서 새 개체를 인스턴스화하는 것은 아닙니다. 코드를 살펴보면 new Student()을 한 번만 호출합니다. 즉, 벡터의 각 필드에서 계속 참조하는 단일 개체가 있음을 의미합니다.

student.setCoursework1(input.nextInt()); 

가 동일한 객체의 coursework1 속성 값을 할당이 유지 라인.

+0

주목! 시간 내 주셔서 감사합니다 :) – Eclayaz

1

루프 바깥에있는 학생 개체가 하나만 만들어집니다. 따라서 루프가 실행될 때마다 개체를 만들어야합니다.

for(int i=0; i<you_length; i++){ 
student = new Student(); //this is what you have to add. every time a new object is created. 
System.out.print("etc"); 
} 
+0

ur 답장을 보내 주셔서 감사합니다. – Eclayaz

관련 문제