2017-11-05 5 views
-2

Da die Frage Titel ich bin nicht in der Lage zu verstehen, legt nahe, weshalb Verfahren für die getrennten Eingänge unterschiedlich sind meine Sortierung verhaltenWarum verhält sich diese Sortiermethode bei bestimmten Eingaben anders?

Frage Einschränkungen: Ein String-Array ist für die Eingabe von n Zahlen verwendet werden, und ordnen sie dann in absteigender Reihenfolge Ordnung und wenn Sie kommen in Zahlen gleiche Werte wie 000.0 und .0 mit, sollten sie in der gleichen Reihenfolge aufgeführt werden, wie ich sie eingegeben und sollte auch die Ausgabe in demselben Format sein, wie sie eingegeben wurden.

Meine Frage: für n=2 als ich eintrat 0.12,.12, meinen Code Ausgang 0.12, .12, aber während für n=3 wenn ich 1, 0.12,.12 Ausgabe, die es eingegeben 1,.12, 0.12 (statt 1,0.12,.12) so, warum dies nicht vorkommt? Und kann eine geringfügige Änderung in meinem Code diesen Fehler beheben?

Code:

String[] s= new String[n]; 
    //input : 
for(int i=0;i<n;i++) 
    s[i]=sc.next(); 
     //Sorting : 
for(int i=0;i<n;i++) 
{ 
    BigDecimal d=new BigDecimal(s[i]); 
    for (int j =i+1; j<n; j++) 
    { 
     BigDecimal a=new BigDecimal(s[j]); 
     if(d.compareTo(a)==-1) 
     { 
      String m = s[j]; 
      s[j]=s[i]; 
      s[i]=m; 
     } 
    } 
} 
//Output : 
for(int i=0;i<n;i++) 
    System.out.println(s[i]); 

Die compareto Verfahren beim Umgang mit Bigdecimal Typnummern halten 0.12 und .12 als gleich, aber wenn String Typen Variablen Handhabung nicht .12 und 0.12 als gleich, also, während Vergleich nur nicht berücksichtigt Ich konvertierte sie in Bigdecimal Typen, aber für die Anzeige hielt ich sie als Strings seit Bigdecimal Typen abrunden .12 als 0.12 aber Strings nicht.

+1

Warum Sie halten Ihre eigene Sortiermethode anstatt das zu tun mit, was Ihnen wurde gesagt, dass Sie in Ihrer vorherigen Frage tun sollten? https://stackoverflow.com/questions/47114295/why-does-my-sorting-method-for-bigdecimal-numbers-fails-to-sort. Warum sollten Sie Ihren Code nicht einrücken und unlesbar machen? –

+0

@JBNizet nein, ich habe diesen Prozess und alle Ausgänge waren völlig in Ordnung und erwartet, ich war nur ein bisschen ein bisschen mehr neugierig .... Wohin habe ich mich irr ... –

Antwort

0

Es scheint gut zu funktionieren, den Testcode:

import java.io.*; 
import java.math.*; 

class test { 
    public static void main(String[] args){ 
     String[] s= {"1","0.12",".12"}; 
     int n = 3; 

     for(int i=0;i<n;i++){ 

       BigDecimal d=new BigDecimal(s[i]); 

       for (int j =i+1; j<n; j++){ 

        BigDecimal a=new BigDecimal(s[j]); 

         if(d.compareTo(a)==-1){ 
          String m = s[j]; 
          s[j]=s[i]; 
          s[i]=m; 

         } 
        } 
       } 
        //Output : 
        for(int i=0;i<n;i++) 
       System.out.println(s[i]); 

    } 

} 

, die Sie hier sehen können:

https://www.jdoodle.com/a/cGZ

Verwandte Themen