2014-12-15 1 views
-1

ArrayList에 입력 한 내용을 인쇄하려고하는데 합법적 인 이름을 명확하게 입력하면이 [[email protected], [email protected], [email protected]]과 같은 이상한 결과가 계속 발생합니다. 그래서 내 코드를 살펴보고 문제가 될 일을 참조하십시오입력 된 ArrayList를 출력하는 방법

public class player { 

    private static String name; 

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

    public String getName() 
    { 
     return name; 
    } 
} 

내가 너희들을 마련 알려주십시오 :

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 클래스입니다! 감사!

+0

해당 줄의 세미콜론을 제거하십시오.'if (a == 1); {'. – Tom

답변

6

기본 구현의 결과는 toString입니다. 클래스 이름 뒤에 @과 해시 코드의 부호없는 16 진수 표현이옵니다.

는 예를 들어, Player 클래스에서 구현하는 toString 방법을 그 변경하려면 :

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

나는 그렇게 생각하지 않는다. 클래스를 조금 바꾸었다. 나는'name' 필드를 비 정적으로 만들었다. 원래 코드에서'static'을 사용했습니다. 즉, 모든 객체 인스턴스가 해당 변수를 공유한다는 것을 의미합니다. 그 이유는 모두 동일합니다. 내 대답에서 당신이 좋아하면, 그것은 더 잘 작동합니다. – janos

+1

오, 나는 그것을 알아 차리지 못했다! 내 실수! 고맙습니다! –

1

자바는 지역 변수 이름에 대한 단서가없는 항목이 추가 된 후. Collections.toString을 실행하면 ArrayList에있는 모든 인스턴스의 toString 메서드가 호출됩니다.

당신은 toString 메소드를 오버라이드 (override) :

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

좋아, 이렇게 할 때 나는 지금 내가 마지막으로 입력 한 것을 제외하고 내가 찾고있는 것을 얻고있다. –

관련 문제