2017-11-05 14 views
-2

質問のタイトルは、私は私のソート方法がこのソート方法は、特定の入力に対して異なる動作をするのはなぜですか?

質問制約別々の入力に対して異なる振る舞いない理由を理解することができませんとおり:文字列配列がn数字の入力に使用されるべきであり、その後、降順でそれらを並べ替えますあなたが000.0.0のような値を持つ数字に遭遇した場合、それらは私が入力したのと同じ順序でリストされなければならず、入力されたのと同じフォーマットで出力されるべきです。

私の質問:n=2ため iが0.12,.12入ったとき、私のコードの出力0.12, .12が、私は1, 0.12,.12その出力1,.12, 0.12を(代わりに1,0.12,.12の)ので、入力されたときn=3ためながら、これはなぜ起こるのでしょうか?私のコードで少し修正すればこの不具合を修正できますか?

コード:

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]); 

compareto方法、Bigdecimalタイプ番号.120.12として等しい0.12.12として等しいが、String型変数を扱う際に考慮していないと見なしを取り扱う場合にのみ比較しながらそう私はそれらをBigdecimalタイプに変換しましたが、表示するためには、タイプが四捨五入されているのでStringsのように表示しました。.12として0.12ですが、Stringsしないでください。

+1

を何あなたは前の質問でやるように言われましたか? https://stackoverflow.com/questions/47114295/why-does-my-sorting-method-for-bigdecimal-numbers-fails-to-sortまた、コードをインデントして読めないようにしてみてはどうでしょうか? –

+0

@JBNizetいいえ私はそのプロセスを使用し、すべての出力は完全にうまくいっていました。ちょっとちょっと気に入りました。 –

答えて

0
これは、テストコード使用して、正常に動作しているようだ

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]); 

    } 

} 

あなたがここに見ることができます:あなたがあなた自身のソート方法を使用して代わりにやり続けるのはなぜ

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

関連する問題