2010-07-01 15 views
0

출력이 오름차순으로 정렬되지 않습니다. 다음은 코드와 출력입니다.TreeSet이 제대로 작동하지 않습니다.

실제 출력은 다음과 같습니다

 
Amy Jose Jeremy Alice Patrick 
Alan Amy Jeremy Helen Alexi 

예상 출력이지만 :

 
Amy, Alice, Jeremy, jose, Patrick 
Alan, Amy, Alexi, Helen, Jeremy 

코드는 : 현재 단지 다시 배열을 작성하는

public class MyFriends 
{ 
    static Set<String> names = new TreeSet<String>(); 

    public MyFriends() 
    { 
     super(); 
     names = new TreeSet<String>(); 
    } 

    public static void exampleMethod() 
    { 
    String[] name1 = {"Amy", "Jose", "Jeremy", "Alice", "Patrick"}; 
    String[] name2 = { "Alan", "Amy", "Jeremy", "Helen", "Alexi"}; 

    for (int i = 0; i < name1.length; i++) 
    { 
     names.add(name1[i]); 
    } 

    for (String aString : name1) 
    { 
     System.out.print(" " + aString); 
    } 

    for (int i = 0; i < name2.length; i++) 
    { 
     names.add(name2[i]); 
    } 

    for (String bString : name2) 
    { 
     System.out.print(" " + bString); 
    } 

    }  

답변

5

... 배열의 내용을 TreeSet에 추가하면 배열이 변경되지 않습니다. 대신 배열을 쓰는 두 블록의

, 당신은 바로 마지막에 하나를해야한다 : 당신이 실제로 출력의 두 줄을 원하는 경우

for (String name : names) 
{ 
    System.out.print(" " + name); 
} 

, 두 TreeSet 인스턴스를 사용해야합니다.

배열을 정렬하려면 배열을 정렬해야합니다. TreeSet에 값을 추가하면 해당 값의 출처도 알지도 모릅니다. 이것은 문자열 객체 (이 경우)에 대한 참조 일뿐입니다.

public class MyFriends 
{ 
    // I just changed the name for testing purtposes 
    public static void main(final String[] argv) 
    { 
     final Set<String> names = new TreeSet<String>(); 
     final String[] name1 = {"Amy", "Jose", "Jeremy", "Alice", "Patrick"}; 
     final String[] name2 = { "Alan", "Amy", "Jeremy", "Helen", "Alexi"}; 

     add(name1, names); 
     display(names); 

     // you wanted to display each array separately right, not the total of all names in both 
     // arrays 
     names.clear(); 

     add(name2, names); 
     display(names); 
    } 

    private static void add(final String[] namesToAdd, 
          final Set<String> names) 
    { 
     for(final String name : namesToAdd) 
     { 
      names.add(name); 
     } 
    } 

    private static void display(final Set<String> names) 
    { 
     for(final String name : names) 
     { 
      System.out.print(" " + name); 
     } 

     System.out.println(); 
    } 
} 

이 잘못된 일을 통과하면 컴파일 타임 오류가 발생합니다 때문에 (존이 그의 대답에 지적으로) 잘못된 변수를 전달하는 문제를 피할 수 :

+0

pssh .. 또한'for (String aString : name1)'을 변경해야합니다. – BalusC

+0

@BalusC : 나는 "이것이 세트를 출력하는 데 사용해야하는 것"이라고 분명히 밝히기를 희망했지만, 더 명확히 할 것입니다 ... –

+0

그러면 출력은 ... Alice Amy Jeremy Jose 패트릭 앨런 알렉 앨리스 에이미 헬렌 제레미 호세 패트릭 는 존 소총으로 다시 – DiscoDude

1

난으로 다시 것입니다.

코드 - 코드가 좋아하는 이름을 반복하는 메소드를 만드는 것이 좋습니다. 코드 안에 코드를 넣으면 메소드 안에 넣을 수 있습니다.

편집 :

public class Main 
{ 
    // I just changed the name for testing purtposes 
    public static void main(final String[] argv) 
    { 
     final Set<String> namesSet1; 
     final Set<String> namesSet2; 
     final String[] nameArray1 = 
     { 
      "Amy", 
      "Jose", 
      "Jeremy", 
      "Alice", 
      "Patrick" 
     }; 
     final String[] nameArray2 = 
     { 
      "Alan", 
      "Amy", 
      "Jeremy", 
      "Helen", 
      "Alexi" 
     }; 

     namesSet1 = makeSet(nameArray1); 
     display(namesSet1); 

     namesSet2 = makeSet(nameArray2); 
     display(namesSet2); 
    } 

    private static Set<String> makeSet(final String[] namesToAdd) 
    { 
     final Set<String> names; 

     names = new TreeSet<String>(); 

     for(final String name : namesToAdd) 
     { 
      names.add(name); 
     } 

     return (names); 
    } 

    private static void display(final Set<String> names) 
    { 
     for(final String name : names) 
     { 
      System.out.print(" " + name); 
     } 

     System.out.println(); 
    } 
} 
+0

고마워요 TofuBeer – DiscoDude

0

당신은 당신의 TreeSet 특별한을 통과 필요 해요 : :-) 여기 존에서 답을 유지에서 두 세트, 나는 그것을 정말 것이 방법입니다 앨리스와 알렉 모두 알파벳 순서로 에이미 전에 와서

Amy, Alice, Jeremy, jose, Patrick 
Alan, Amy, Alexi, Helen, Jeremy 

첫째 : Comparator이 순서를 얻을 수 있습니다. 또한 jose는 패트릭이 소문자로 시작하기 때문에옵니다 (주문시 대소 문자를 무시하려면 Comparator.CASE_INSENSITIVE_ORDER 또는 Collator을 사용하십시오).

+0

저는 Comparator를 사용할 수 없지만 답변에서 매우 만족하며 Jon Skeet의 조언을받을 것입니다. 고맙습니다. – DiscoDude

관련 문제