0

人を作成し、そのような人のリストを表示するプログラムを作成したいのですが、「arraylist」を使用して結果を出力するロジックがうまく機能しているかどうかはわかりません。どうもありがとうございました。

package person;
import java.util.*;

public class Person {
    public int Id;
    public String Name;
    public boolean Show;
    public ArrayList people;

    public Person(
            int identificator,
            String thename,
            boolean showornot
            ){
        this.Id = identificator;
        this.Name = thename;
        this.Show = showornot;
    }

    public void InsertPerson(Person person, ArrayList list){
        this.people = list;
        list.add(person);
    }

}

メイン:

package person;
import java.util.*;


public class Trying {

    public static void main(String[] args) {
     Scanner stdin = new Scanner(System.in);
     Scanner stdin2 = new Scanner(System.in);
     Scanner stdin3 = new Scanner(System.in);
     Scanner stdin4 = new Scanner(System.in);

     ArrayList list_of_people;
     list_of_people = new ArrayList();


     int option = 0;
     int identificador = 0;
     String name = "";
     boolean show = true;    

    name = “Toni”;


         Person person1 = new Person(identificador, name, true);
         person1.InsertPerson (person1, list_of_people);
         Iterator ite = list_of_people.iterator();
         while(ite.hasNext()){
             System.out.println(list_of_people);
    }
}

ありがとう!

4

3 に答える 3

5

問題:各「人」のプロパティとして配列リスト「人」を作成しています(各人は人のリストを持っていると言います)

クイックフィックス: Tryingクラスに 移動public ArrayList people;します。Trying クラスにも移動 します。public void InsertPerson(Person person, ArrayList list)

より良い修正: 配列リスト "people" と InsertPerson メソッドを含む PeopleManager クラスを使用することをお勧めします。次に、PeopleManagerを使用してユーザーリストを作成します。

public class PersonManager
{
    ArrayList<Person> people;

  public PersonManager()
  {
      people = new ArrayList<Person>();
  }

  public void InsertPerson(Person person)
  {
      people.add(person);
  }     
}

次に、Person から arraylist を削除し、Person からメソッド InsertPerson を削除できます。Trying クラスに PersonManager を作成する必要があります。

于 2012-05-17T19:55:53.337 に答える
1

他の誰もが言っていることは真実ですが、理論的にはあなたのコードはまだ機能するはずだと思います. ただし、この行には問題があります...

while(ite.hasNext()){
    System.out.println(list_of_people);
}

反復ごとにリスト全体を出力しており、おそらく無限ループしています。このようなものに変更してください...

while(ite.hasNext()){
    Person curPerson = (Person)ite.next(); 
    System.out.println(curPerson.Name);
}

もう少しエレガントな解決策は、 foreach ループのイテレータを捨てることです...

for (Person person : list_of_people) {
    System.out.println(person.Name);
}
于 2012-05-17T19:59:54.800 に答える
1

public ArrayList people;Person クラスには属しません。これをクライアント コード (Trying クラス) で使用するか、ArrayList から継承するクラス People を作成することをお勧めします。必要に応じて、そのクラスに InsertPerson 関数を追加できます。

また、コレクションには ArrayList ではなく ArrayList を使用することをお勧めします。ここで一般的なコレクションのチュートリアルを参照してください。パブリック フィールドを使用する代わりに、getter/setter メソッドも作成する必要があります。

したがって、クラスは次のようになります。

public class Person { // ...

public class People extends ArrayList<Person> {
    public void InsertPerson(Person person) {
        this.add(person); 
    }
 // ...
于 2012-05-17T19:55:05.060 に答える