【问题标题】:Adding a member to an array of objects将成员添加到对象数组
【发布时间】:2015-01-27 13:18:52
【问题描述】:

我想写一个类 (ListDePersonnes) 来处理我的数组,目前我只有两种方法,一种是添加对象,另一种是将数组内容打印到屏幕上。

ListDePersonnes

import java.util.Scanner;

public class ListDePersonnes {
    int count,t;
    personne liste[];
    Scanner s=new Scanner(System.in);

    public void initialize() {                  //
        System.out.println("entrer la taille"); //
        t = s.nextInt();                        // I'm not so sure about this part.
        personne[] liste = new personne[t];     //

    }


    public void addpersonne(){

        System.out.println("what is the name?");
        String nom= s.next();
        System.out.println("what is the age?");
        int age= s.nextInt();
        System.out.println("what is the weight?");
        double poid= s.nextDouble();

        liste[count] = new personne(nom,age,poid);  // weight is poid in frensh 
        count++;
    }



    public void showAll(){
        for (int i=0;i<t;i++ ){
            System.out.println("name: "+ liste[i].getNom() + " / age: "+liste[i].getAge()+" / poid:       "+liste[i].getPoid());
        }
    }
}

personne

public class personne {

    private String nom;
    private int age;
    private double poid;

    public personne(String nom, int age, double poid) {

        this.nom = nom;
        this.age = age;
        this.poid = poid;
    }

}

Main

import java.util.Scanner;
public class LaListe {

    public static void main(String[] args) {
        Scanner s=new Scanner(System.in);
        ListDePersonnes lper= new ListDePersonnes();
        lper.initialize();
        lper.addpersonne();
    }

}

抛出的错误是:

线程“main”中的异常 java.lang.NullPointerException 在 ListDePersonnes.addpersonne(ListDePersonnes.java:29) 在 LaListe.main(LaListe.java:16)

【问题讨论】:

  • personne[] liste = new personne[t];。您正在隐藏您的类字段变量。应该是liste = new personne[t];
  • 伙计们,放轻松。我是新手 :) 大声笑所以变得可怕......只需格式化你的代码并表现出一些努力,人们不会投票或关闭
  • @IslamBouderbala 很高兴你也投了赞成票 :)
  • 如果用户填满数组,您可能需要考虑创建一个更大的数组以容纳更多 Personne 的方法。或者使用不同的数据结构,例如 ArrayList,它们使用起来非常简单。
  • @Islam Bouderbala 你的意思是如何从数组中删除人?数组具有静态长度,因此您必须创建长度为lenght-1 的新数组,然后将所有Objects(您要删除的除外)“复制”到新数组。我建议你使用List

标签: java arrays class


【解决方案1】:

你是 shadowing 变量 liste。替换

Personne[] liste = new Personne[t]; 

liste = new Personne[t]; 

【讨论】:

  • 非常感谢,知道如何从数组中删除人员吗?
  • 如果您需要从集合中删除一个对象,那么您可以使用List,例如ArrayList
  • 我声明它是否与我对简单数组所做的一样?
【解决方案2】:

Java 包含一个类来更轻松地执行此类操作,List (docs)。

使用示例(来自here):

向列表中添加元素:

List<Personee> listA = new ArrayList<Peronsee>(); //New ArrayList
listA.add(new Personee("Bob", 29, 165)); //Add element
listA.add(new Personee("Alice", 25, 124)); 
listA.add(0, new Personee("Eve", 34, 136)); //This adds an element to the beginning of the list, index 0.

移除元素:

listA.remove(personee1); //Remove by object
listA.remove(0); //Remove by index

访问/遍历列表:

//access via index
Peronsee element0 = listA.get(0);
Personee element1 = listA.get(1);
Personee element3 = listA.get(2);


//access via Iterator
Iterator iterator = listA.iterator();
while(iterator.hasNext(){
  Personee personee = (Personee) iterator.next();
}


//access via new for-loop
for(Personee personee : listA) {
    System.out.println(personee.nom + "," + personee.age + "," + personee.poid);
}

【讨论】:

  • 据我所见。那是一个数组列表。我应该怎么做才能获得对象“人员”列表?
  • @IslamBouderbala 更新了我的答案。 List 接口可以是通用的(List&lt;Personee&gt;),它限制了可以从列表中添加和读取的类型。在这种情况下,List 对象只能处理 Personee 类型的对象。
猜你喜欢
  • 1970-01-01
  • 2019-09-25
  • 1970-01-01
  • 1970-01-01
  • 2010-11-25
  • 1970-01-01
  • 2011-01-05
  • 2022-01-13
  • 2018-09-06
相关资源
最近更新 更多