2015-03-31 3 views
0

У меня есть пользователь, вводя данные Имя, Фамилия и Номер. Проблема заключается в том, когда я распечатываю массив, он будет распечатывать только последние введенные данные.Array печать одной и той же ячейки снова и снова

Например, если пользователь вводит: (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]); 
     } 
+0

друзья [0] .getFirst (друзья [0]); почему это получается? он должен быть установлен ... и вы вручную устанавливаете индекс 0 вместо использования i. – Pratik

+0

К сожалению, это была опечатка с моей стороны. Предполагается, что это друзья [i]. –

+0

друзья [i] = new Datab(); не следует ли здесь применять явный конструктор? где вы определяете поля объекта? – drgPP

ответ

1

Причина вы определили переменную first, last, cell как статические.

Вы должны удалить статику и сделать ее специфичной для экземпляра. То же самое относится и к методу.

Когда вы ставите переменную как статическую, у вас есть только один экземпляр того же самого и независимо от того, что вы назначили последнему, это тот, который вы увидите, и, следовательно, вы видите одно и то же значение, которое будет напечатано независимо от того, что вы назначили до.

+0

Спасибо за ваш ответ. Я применил ваш ответ и удалил статические идентификаторы. Теперь выход является последним объектом, а остальные печатают нуль. Я что-то упускаю? –

+0

вставьте свой обновленный код в свой вопрос, чтобы мы могли посмотреть на него. – SMA

+0

Не обращайте внимания на мой последний комментарий. У меня был индекс индексов друзей, равный нулю вместо i. –

0

Переменные first, last, cell статичны. Кроме того, методы getFirst(), getLast(), getCell(), определенные для инициализации переменных, являются статическими.

Для статических членов (переменных и членов) для всех экземпляров класса создается только одна копия. Итак, в вашем случае все экземпляры класса Datab, т. Е. Друзья [] ссылаются на ту же копию переменных first, last, cell.

Удаление static ключевое слово из объявления переменных и методов решит проблему, так как все экземпляры Datab будут указывать на разные переменные.

Смежные вопросы