2013-08-02 2 views
0

참고 : 사람들이 내게 말하려고하는 방법에 대한 코드를 편집했지만 여전히 원하는 결과를 얻지 못했습니다. 이제는 내 결과가 "[email protected]"이지만 여러 번 새로운 성과 이름을 입력합니다. 적어도 코드가 충돌을 일으키지 않고 코드를 만들었습니다.내가 만든 객체의 인스턴스를 사용하여 ArrayList를로드하는 방법

ArrayList를 사용하는 방법을 배우고 내가 만든 Object의 인스턴스로 Array 목록을로드해야합니다. 배열을 사용하여이 작업을 수행하는 방법을 알고 있지만이 할당에서는 ArrayList를 사용하여이 작업을 수행해야합니다. 다음은 내가해야 할 일의 예입니다.

// my "main" class 
package examples.search; 

import java.util.ArrayList; 

import dmit104.Util; 

public class MyPeople { 

    public static void main(String[] args) { 

     ArrayList<Person> people = new ArrayList<Person>(); 
     Person tempPerson = new Person(); 
     String firstName; 
     String lastName; 
     char choice = 'y'; 
     int count = 1; 

     // fill my ArrayList 
     do { 
      people.add(tempPerson); 
      // I have a Util class that has a prompt method in it 
      firstName = Util.prompt("Enter First Name: "); 
      lastName = Util.prompt("Enter Last Name: "); 

      tempPerson.setFirstName(firstName); 
      tempPerson.setLastName(lastName); 

      count++; 

      choice = Util.prompt(
        "Enter another person? [y or n]: ") 
        .toLowerCase().charAt(0); 

     } while (choice == 'y'); 

     // display my list of people 
     for(int i = 0; i < people.size(); i += 1) { 
      System.out.print(people.get(i)); 
     } 

    } 

} 

// my Person class which I am trying to build from 
public class Person { 

    // instance variables 
    private String firstName; 
    private String lastName; 

    // default constructor 
    public Person() { 
    } 

    public String getFirstName(){ 
     return firstName; 
    } 

    public void setFirstName(String firstName) { 
     this.firstName = firstName; 
    } 

    public String getLastName() { 
     return lastName; 
    } 

    public void setLastName(String lastName) { 
     this.lastName = lastName; 
    } 
} 

여러 가지 방법을 시도했지만 내 ArrayList가 채우지 않아도됩니다. 앞서 언급했듯이 배열에 문제가 없거나로드 된 생성자 메서드가 있더라도 그렇게 할 수는 없습니다. 나의 실제 임무에서 나는 정해진 방법으로 그것을하기로되어있다. 내가 사방에보고하고 내 문제에 대한 해결책을 찾을 금요일 인 것은 내 강사하지 않을 수

.

+0

으로 정의됩니다. "기본 생성자"는 생성자가 아닙니다. 클래스의 생성자는 클래스와 동일한 이름으로 이름을 지정해야합니다. 이 경우 생성자의 이름은 Person()이어야합니다. 제쳐두고, 가변 클래스를 필요로하지 않는 한 항상 값 객체를 불변 유형의 인스턴스로 인스턴스화해야합니다. 귀하의 경우 lastname과 firstname은 final로 선언하고 Person() 생성자에서 초기 값으로 설정해야합니다. – scottb

+0

배열에 대해 어떻게하는지 알고 있다고 말하지만,별로 다르지 않습니다. 'ArrayList' 사람들을 생성 한 후에, 당신은 그 안에 객체가 없다면, 그것을 생성하고리스트에 추가해야합니다. – madth3

+0

Oh ya scottb, 내 수업에서 말하는 곳에 연락하십시오. Person이라고 말해야합니다. 내가 코드를 붙여 넣을 때 그것을 잊어 버렸다. 그리고 실제로 연락처 관리자를 만들고있어 사용자가 연락처를 추가 및 제거하고 변경할 수 있어야합니다 (이메일, 전화 번호 등이 변경된 경우) – leoJaxx

답변

0

사용하는 사람들에 추가,하지만 혼자는 잠재적 인의 목록을 정의 Person 인스턴스. 그러나 지금까지 각 목록 항목은 null입니다. get(i)null을 반환하고 다음은 null.setFirstName(..)은 NullPointerException을 발생시킵니다.

그래서 당신은 목록에 가기로되어있다 Person의 인스턴스를 생성해야합니다

firstName = Util.prompt("Enter First Name: "); 
Person p = new Person(); //create the instance 
people.add(p); //add the instance to the list 
p.setFirstName("..."); //set any values 
+0

감사합니다. f1sh. 그래서 ArrayList에 여러 인스턴스를 추가하려면 위 코드를 루프 안에 추가하면됩니까? 아마도 for 루프일까요? – leoJaxx

+0

나는'IndexOutOfBoundsException'을 throw한다고 생각한다. –

+0

@leoJaxx 네, 특정 양의''Person'' 인스턴스를 생성하여리스트에 저장하기를 원하기 때문에 루프 안에서 사용하십시오. ''for'' 루프는 완벽합니다. – f1sh

2

당신은해야합니다 미리 당신에게

레오 정말 고마워요 Person을 작성한 다음 add을 작성하여 ArrayList으로 변경하십시오.

for (int i = 0; i < count; i++) { 
    Person person = new Person(); 

    person.setFirstName("Foo"); 
    person.setLastName("Bar"); 

    people.add(person); 
} 
+0

감사 adashr. 그럼이 일이 내가하려는 일을하는거야? 방금 입력 한 내용을 "Person person = new Person();" 및 "person.setFirstName (firstName);" 그게 옳은 것 같니? – leoJaxx

1

그것의 당신의 라인 people.get(i).setFirstName(firstName);가 첫 번째 인덱스 난에 무엇을하려고하지만 당신은 아직 아무것도 설정하지 않았기 때문에 충돌.

어느 첫번째 세트 사람들은 [내가] 빈 사람에게, 또는 이름 및 성을 사용하는 사람을, 그리고 당신은 ArrayList<Person>people.add(person);

0

지금 당신이 ArrayList에로 사람 개체를 저장하고 해당 개체를 인쇄 할 수 있습니다. Person 개체를 인쇄 할 때 firstname 및 lastName을 인쇄하려면 toString 메서드를 재정의해야합니다. 당신의 Person 클래스는 한 두 번째 질문에 관해서는

public String toString(){ 
    return String.format("[Personn: firstName:%s ,lastName: %s]", firstName,lastName); 
} 
+0

내 수업이 빠졌습니다. 난 그냥 내 변수 (firstName + lastName) 반환하도록 본문을 변경했습니다. 감사. 그러나 나는 그들이 여기에있는 코드를 나에게 준 다른 대답을 선택했다. 내 원래 코드는 엉망이었다. 그게 고마워, 고마워. – leoJaxx

0

에 다음 코드를 추가, 당신은 Person 클래스의 toString() 메서드를 재정의해야합니다. [email protected]과 같은 출력은 클래스의 toString() 클래스의 메서드이며, [email protected]

관련 문제