2014-12-15 4 views
-1

Я пытаюсь распечатать то, что я ввел для своего ArrayList, но я все время получаю странные результаты, такие как этот [[email protected], [email protected], [email protected]], когда я четко указываю законные имена. Так посмотрите на мой код и посмотреть, что может быть проблема:Как распечатать введенный ArrayList

if (o == 5) { 
    double RD, t, old, x; 
    String tournament, player; 
    int a, number_of_players, place; 
    ArrayList<player> players = new ArrayList<player>(); 
    System.out.println("1:Add a tournament \t2:View Existing"); 
    a = keyIn.nextInt(); 
     if (a == 1) { 
      System.out.println("\nEnter tournament name"); 
      tournament = keyIn.next(); 
      System.out.println("\nEnter number of players"); 
      number_of_players = keyIn.nextInt(); 
      System.out.println("Enter players"); 
      for (int i = 0; i < number_of_players; i++) { 
       String name = keyIn.next(); 
       player plr = new player(); 
       plr.setName(name); 
       players.add(plr); 
      } 
      System.out.println("Enter places for"); 
      System.out.println(players); 
      place = keyIn.nextInt(); 

Вот мой player класс:

public class player { 

    private static String name; 

    public void setName(String pName) 
    { 
     name = pName; 
    } 

    public String getName() 
    { 
     return name; 
    } 
} 

Позвольте мне знать, что вы, ребята придумали! Благодаря!

+0

Удалить точку с запятой в этой строке 'if (a == 1); { '. – Tom

ответ

6

То, что вы видите, является результатом реализации по умолчанию toString. Это имя класса, за которым следует @ и шестнадцатеричное представление без знака хеш-кода.

Чтобы изменить это, реализовать метод toString в вашем Player классе, например:

public class Player { 

    private String name; 

    public void setName(String pName) { 
     name = pName; 
    } 

    public String getName() { 
     return name; 
    } 

    @Override 
    public String toString() { 
     return "Player{name='" + name + "'}"; 
    } 
} 
+0

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

+0

Я так не думаю. Обратите внимание, что я немного изменил свой класс: я сделал поле «имя» нестатичным. В вашем исходном коде вы использовали 'static', что означает, что все экземпляры объектов используют эту переменную, поэтому они все одинаковы. Если вам нравится в моем ответе, он должен работать лучше. – janos

+1

О, я этого не заметил! Виноват! Спасибо! –

1

Java не имеет понятия о локальных именах переменных после добавления элемента. Когда вы запустите Collections.toString, он просто вызовет метод toString всех экземпляров в ArrayList.

Вы должны переопределить метод toString:

public class player { 

    private static String name; 

    public void setName(String pName) { 
     name = pName; 
    } 

    public String getName() { 

     return name; 
    } 

    @Override 
    public String toString() { 
     return name; 
    } 

} 

Метод toString определяет текстовое представление Player экземпляров. По умолчанию метод toString печатает класс экземпляра, а также его местоположение в памяти.

Есть, конечно, альтернативные способы получения текстового представления.

+0

Хорошо, когда я это делаю, я получаю то, что ищу, но теперь он просто берет мой последний вход –