Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中向数组列表添加对象_Java_Arraylist - Fatal编程技术网

在Java中向数组列表添加对象

在Java中向数组列表添加对象,java,arraylist,Java,Arraylist,我正在尝试将一个对象添加到数组列表中,并具有以下内容- publicstaticvoidmain(字符串[]args){ 作者=新作者(); ArrayList tabAuthors=新建ArrayList(); 作者:setAuthId(1); 作者:setAuthName(“Roald Dahl”); System.out.println(Authors.toString()); tabAuthors.add(作者); 作者:setAuthId(2); 作者:setAuthName(“Jul

我正在尝试将一个对象添加到数组列表中,并具有以下内容-

publicstaticvoidmain(字符串[]args){
作者=新作者();
ArrayList tabAuthors=新建ArrayList();
作者:setAuthId(1);
作者:setAuthName(“Roald Dahl”);
System.out.println(Authors.toString());
tabAuthors.add(作者);
作者:setAuthId(2);
作者:setAuthName(“Julia Donaldson”);
System.out.println(Authors.toString());
tabAuthors.add(作者);
对于(int counter=0;counter
作者类

公共类作者{
私有int-authId;
私有字符串authName;
public int getAuthId(){
返回authId;
}
public void setAuthId(int authId){
this.authId=authId;
}
公共字符串getAuthName(){
返回authName;
}
public void setAuthName(字符串authName){
this.authName=authName;
}
@凌驾
公共字符串toString(){
返回“作者{”+
“authId=“+authId+
,authName='“+authName+'\'”+
'}';
}
}
我期待代码返回- 1罗尔德达尔酒店 2朱莉娅·唐纳森

相反,我得到了- 2朱莉娅·唐纳森 2朱莉娅·唐纳森


为什么数组列表没有反映第一个对象的值?

您正在同一对象上设置值
Julia Donaldson
。将变量
Authors
引用到新对象,问题就解决了

authors Authors = new authors();
ArrayList<authors> tabAuthors = new ArrayList<authors>();

Authors.setAuthId(1);
Authors.setAuthName("Roald Dahl");
System.out.println(Authors.toString());
tabAuthors.add(Authors);

Authors = new Authors(); //Reference Authors to a new object here, or else 
//you're using the same object and you'll overwrite the value Roald Dahl with 
//Julia Donaldson 
Authors.setAuthId(2);
Authors.setAuthName("Julia Donaldson");
System.out.println(Authors.toString());
tabAuthors.add(Authors);
authors=新作者();
ArrayList tabAuthors=新建ArrayList();
作者:setAuthId(1);
作者:setAuthName(“Roald Dahl”);
System.out.println(Authors.toString());
tabAuthors.add(作者);
作者=新作者()//在此处将作者引用到新对象,否则
//您使用的是同一个对象,您将用
//朱莉娅·唐纳森
作者:setAuthId(2);
作者:setAuthName(“Julia Donaldson”);
System.out.println(Authors.toString());
tabAuthors.add(作者);

因为您只创建一个对象,并在设置属性时第二次重写


插入第二个对象时,您需要创建新对象。

除了@Maurice给出的上述答案之外,您还可以在
authors
类中添加
构造函数来设置每个对象的值

public authors(int authId, String authName) {
        super();
        this.authId = authId;
        this.authName = authName;
}
main()
中,按如下所示创建两个对象并将其添加到列表中:

public static void main(String[] args) {

        Authors authors1 = new Authors(1, "Roald Dahl");
        Authors authors2 = new Authors(2, "Julia Donaldson");
        
        List<Authors> tabAuthors = new ArrayList<Authors>();

        System.out.println(authors1.toString());
        tabAuthors.add(authors1);

        System.out.println(authors2.toString());
        tabAuthors.add(authors2);

        for (int counter = 0; counter < tabAuthors.size(); counter++) {
        System.out.println(tabAuthors.get(counter).getAuthId() + " " + tabAuthors.get(counter).getAuthName());
      }
} 

感谢您的及时回复。
我在代码中添加了以下内容,因为我需要添加数量不确定的对象- tabAuthors.add(新作者(authId、authName、authCountry、numBooks))

并将authId、authName、authCountry和numBooks声明为变量。 正在从数据库表中提取对象值

authors{authId=1, authName='Roald Dahl'}
authors{authId=2, authName='Julia Donaldson'}
1 Roald Dahl
2 Julia Donaldson