基本上我必须编写一个简单的联系人管理器,并将对象存储在数组列表中。
让我感到沮丧的是我有newContact方法,在调用时会创建Contact的新实例,并将其存储在ArrayList中。问题是每次调用该方法时,列表中的所有其他对象都会被覆盖。
import java.util.ArrayList;
public class ContactManager {
public static ArrayList<Contact> contactList = new ArrayList<Contact>();
public static Contact[]c = {};
public static void main(String[]args){
newContact();
newContact();
System.out.println(contactList.get(1).getName());
System.out.println(contactList.get(0).getName());
}
public static void newContact(){
Contact c = new Contact();
contactList.add(c);
}
}
在Contact类constructore中,有一些代码使用Scanner类初始化对象的属性。
如果在第一次通话中我输入“John”并在第二个函数调用中输入“Peter”,上面的代码将打印出来:
彼得 彼得。
为什么不打印出John Peter?
我唯一能想到的是,Java存储只能引用arraylist中的对象,而且不像变量对象在函数执行后不会被销毁..
有什么方法吗?
我希望这能解释我想要实现的目标。
PS。我知道人们讨厌作为家庭作业问题的人。但我正在做这个额外的,以便学习新的东西。原始赋值几乎不需要实例化5个对象并将它们存储在ArrayList中。而且我已经完成了,现在我只是想看看我能否提出更具动态性的解决方案。
联系班级代码:
import java.util.Scanner;
公共课程联络{
private static String name, number;
//constructor will ask to enter contact details
public Contact(){
Scanner in = new Scanner(System.in);
System.out.println("Enter name:");
name = in.next();
System.out.println("Enter number:");
number = in.next();
}
//getters and setters
public static String getName(){
return name;
}
public static String getNumber(){
return number;
}
public static void setName(String newName){
name = newName;
}
public static void setNumber(String newNumber){
number = newNumber;
}
}
答案 0 :(得分:1)
这是因为Contact
类中的成员是静态的。这意味着所有Contact
个实例共享相同的name
和number
。您应该将它们设为实例成员,以便每次执行new Contact
时都会获得这些变量的新副本。