阵列一遍又一遍地打印出相同的单元格

时间:2015-03-31 06:45:57

标签: java arrays

我让用户输入数据名字,姓氏和号码。问题是当我打印出数组时,它只打印出最后输入的数据。

例如,如果用户输入:(F,V 12345)               (L,K 2345)              (R,G 4555) //使用缩写而不是名称

该程序将打印出来:

R,G 4555 R,G 4555 R,G 4555

Datab.java

 public Datab()
{
    first = null;
    last = null;
    cell = null;
}

public Datab(String f, String l, String c)
{
    first=f;
    last=l;
    cell=c;

}
public static String getFirst(Datab friends)
{
    Scanner kb = new Scanner(System.in);
    System.out.println("Enter First name: ");
    first = kb.next();
    return first;

}
public static String getLast(Datab friends)
{
    Scanner kb = new Scanner(System.in);
    System.out.println("Enter Last name: ");
    last = kb.next();


    return last;  
} 
public static String getCell(Datab friends)
{
    Scanner kb = new Scanner(System.in);
    System.out.println("Enter Cell Number: ");
    cell = kb.next();

    return cell;

}



 public String toString(){




 return (first + " ,"+" "+ last + " "+ cell);



   }

}

DBMS.java

Datab[] friends = new Datab[n];


    for (int i = 0; i < friends.length; i++) {
        friends[i] = new Datab();
        System.out.println("\nFilling object #: " + (i + 1));



        friends[i].getFirst(friends[i]);

        friends[i].getLast(friends[i]);
        friends[i].getCell(friends[i]);


    }

for(int x=0; x<friends.length; x++){

            System.out.println(friends[x]);
        }

2 个答案:

答案 0 :(得分:1)

您已将变量first, last, cell定义为静态的原因。

您应该删除静态并使其特定于实例。同样适用于方法。

当你将一个变量设为静态变量时,你只需要一个相同的实例,最后你指定的值就是你要看的那个,因此无论你之前分配什么,你都会看到相同的值被打印出来

答案 1 :(得分:0)

变量 firstlastcell 是静态的。此外,为初始化变量而定义的方法 getFirst()getLast()getCell() 是静态的。

对于类的所有实例,只为静态成员(变量和成员)创建了一个副本。因此,在您的情况下,类Datab的所有实例,即friends [] 引用相同的变量副本 first,last,cell。

从变量声明和方法中删除static关键字将解决问题,因为Datab的所有实例都将指向不同的变量。