gpt4 book ai didi

java - ArrayList仅重复打印最后一个成员

转载 作者:行者123 更新时间:2023-12-01 18:06:32 25 4
gpt4 key购买 nike

从我创建的数组列表中,运行程序后显示的结果始终是列表的最后一项,重复。

我创建了两个类,一个名为 Array_List6,另一个名为 Data。 Array_List6 依赖于数据。

请查看当前输出:https://www.dropbox.com/s/9nb3r2hr4pm4j8r/Screen%20Shot%202016-03-15%20at%2017.57.53.png?dl=0

下面是我的java代码。

import java.util.ArrayList;
import javax.swing.JOptionPane;

public class Array_List6 {


public static void main(String args[]) {

// Data x = new Data("Fred",41);
// x.Print();


// Using an Array List.
// Create an ArrayList of objects.

ArrayList<Data> array_list = new ArrayList<Data>();

array_list.add(new Data("Fred", 21));
array_list.add(new Data("Joe", 43));
array_list.add(new Data("Zoe", 37));
array_list.add(2, new Data("Harry", 78));

// Display our objects.

PrintDataArray(array_list);

//conclusion: duplicating last result in array. i.e last person Harry for example is displayed 4 times instead of Fred, Jo, Zoe then Harry.

System.out.println("==================5.5=====================");


//5.5 - ArrayList Implementation Considerations

//Array A
/*-*/ ArrayList<Data> ArrayA = new ArrayList<Data>();

ArrayA.add(new Data("Fred", 21));
ArrayA.add(new Data("Joe", 43));
ArrayA.add(new Data("Zoe", 37));

//ArrayB
/*-*/ ArrayList<Data> ArrayB = new ArrayList<Data>();

// Display our objects.

PrintDataArray(ArrayA);
System.out.println();
ArrayB = ArrayA;
PrintDataArray(ArrayB);
System.out.println();
ArrayA.remove(1);
PrintDataArray(ArrayB);

System.out.println("-------------------------------------");

/*-*/ ArrayList<Data> ArrayC = new ArrayList<Data>();

ArrayC.add(new Data("Fred", 21));
ArrayC.add(new Data("Joe", 43));
ArrayC.add(new Data("Zoe", 37));

//cloning an array
System.out.println("Cloning an array.");
System.out.println();

/*-*/ ArrayList<Data> ArrayD = new ArrayList<Data>();

PrintDataArray(ArrayC);
System.out.println();

ArrayD = (ArrayList<Data>)ArrayC.clone();
ArrayC.remove(1);
PrintDataArray(ArrayC);
System.out.println();

PrintDataArray(ArrayD);
System.out.println();

//Deleting elements from ArrayA and ArrayC and displaying the elements from ArrayB and
//ArrayD respectively.


} //main



private static void PrintDataArray(ArrayList<Data> array)
{
for(int i=0;i<array.size();++i)
{
array.get(i).Print();
}
}

private static void PrintArray(int[][] array)
{
for(int i=0;i<array.length;++i)
{
for(int j=0;j<array[i].length;++j)
{
System.out.print(array[i][j] + " ");
}
System.out.println();
}
}


}


} //class

这是数据类。

public class Data {

private static String name;
private static int age;
Data(String n,int a)

{
name = n;
age = a;
}


public static String GetName()
{
return(name);
}


public static void SetName(String n)

{
name = n;
}


public static int GetAge()

{
return(age);
}

public static void SetAge(int a)

{
age = a;
}

public static void Print()

{
System.out.println(("("+GetName() + "," + GetAge() +")" ));
}

}

最佳答案

那么你的数据类只有静态成员。这就是问题所在。您需要实例成员。静态变量在所有实例中共享(每次程序执行时它存在一次)。您可能想看看Oracles "Understanding Class Members"页。作为另一个例子diagram关于程序内存以及何时分配它可能有助于理解。

更改为:

public class Data{

private String name;
private int age;

public Data(String name, int age){
this.name = name;
this.age = age;
}

public String getName(){
return this.name;
}

[... Other getters and setters...]
}

关于java - ArrayList仅重复打印最后一个成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36017277/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com