2017-11-04 5 views
-3

문제 : 내가 특정 정렬 방법을 사용했으나 예상대로 작동하지 않았고 어디에서 잘못했는지 이해하지 못했습니다.Bigdecimal 숫자에 대한 정렬 방법이 정렬되지 않는 이유는 무엇입니까?

내 코드 문자열

코드와 배열에 따라 그들을 재정렬 후 문자열 배열로 문자열로 입력 (수있는) 갔고, 그때 그들을 비교하면서 BigDecimal의 숫자로 변환하고, 질문 :

String s[]={-100, 50, 0, 56.6, 90, 0.12, .12, 02.34, 000.000}; 

    for(int i=0;i<n-1;i++) 
     { 
      for (int j =i+1; j<n; j++) 
      { 
       BigDecimal d = new BigDecimal(s[j]); 
       BigDecimal a = new BigDecimal(s[i]); 
       if(a.compareTo(d)==-1) 
        { 
         String m = s[j]; 
         s[j]=s[i]; 
         s[i]=m; 
        } 
       } 
     } 
     //output :90, 56.6, 50, 02.34, .12, 0.12, 0, 000.000, -100 

     //expected output :90, 56.6, 50, 02.34, 0.12, .12, 0, 000.000, -100 

제약 : s[n]은 문자열 배열이 두 개의 입력이 같은 값이있는 경우 그들은 우리가 그들을 입력 한 것과 같은 순서로 배열에 나열되어야합니다.

내가 입력 한 것과 동일한 순서로 0.12와 .12가 출력되지 않는 이유를 모르겠다. 알고리즘이 어딘가 잘못 되었다면 0과 000.000이 내가 입력 한 것과 같은 순서로 나타나서는 안된다. , 대신에 그들은했다.

+7

은 왜 당신의 문자열 배열 문자열을 포함 않는거야? – byxor

+0

실제로 숫자를 문자열로 입력해야한다는 질문 제한이 있습니다 –

+0

문자열 리터럴 (예 :'{ "-100", "50"'...)으로 만들려면' "로 묶어야합니다. 여기에 멋진 자바 문법이 없지만 컴파일 할 때 마음이 아프다. – byxor

답변

3

문자열 번호를 사용하기를 원하기 때문에 인용 부호로 묶어야하지만 정렬은 훨씬 더 읽기 쉽습니다. 나는 다음과 같은

String[] numbers ={"-100", "50", "0", "56.6", "90", "0.12", ".12", "02.34", "000.000"}; 
    List<BigDecimal> decimalList = new ArrayList<>(); 
    for(String s: numbers){ 
     decimalList.add(new BigDecimal(s)); 
    } 
    Collections.sort(decimalList); 
    Collections.reverse(decimalList);  // edit , forgot this line 
    decimalList.forEach(System.out::println); 
+0

더 많은 문자가 사용 되더라도 각 단계가 더 명확 해지기 때문에 확실히 초보자에게는 더 좋은 대답입니다. 마지막에는 코드가 읽기 쉽고 이해하기 쉽다는 것을 세어 봅니다. –

3

당신은 Stream를 사용하고 collect 및 인쇄를 sorted에 사용자 정의 비교를 통과 할 수 있습니다 제안합니다. 마찬가지로,

String s[] = { "-100", "50", "0", "56.6", "90", "0.12", ".12", "02.34", "000.000" }; 
System.out.println(Stream.of(s) 
     .sorted((a, b) -> new BigDecimal(b).compareTo(new BigDecimal(a))) 
     .collect(Collectors.joining(", "))); 

그리고 (요청에 따라) 내가

90, 56.6, 50, 02.34, 0.12, .12, 0, 000.000, -100 
+0

스테판의 대답보다 읽기 쉽다고 생각하십니까? –

+0

@ 토마스. 나는 무엇 OP 인쇄를 요청하고 우리는 결과를 비교하는 경우, 스테판은'-100, 0, 0.000, 0.12, 0.12, 2.34, (50), 56.6을 생산하는 (정확하게 정렬, 더 읽을 생각 90' - 올바르지 않습니다). –

+1

Java 8 기능의 잠재력과 코드의 잠재 성을 최대한 살리므로 답변을 Upvoted. 나는 내 수준이 더 정확한 엔트리 레벨 코더에 대해 읽을 수 있다고 생각하고 올바른 결과를 내기 위해 편집했다. – Stefan