2016-05-08 10 views
0

私は学校のプロジェクトをやっていて、私はそれをソートしようとしている2次元の配列にキャッチした耳を持っています。Java。 2d配列の列ごとの並べ替え

それでは、私が得たことはこれです:私がする必要がどのような

String array[][]={ {"5", "22,2", "car payment", "visa", "21/04/2016}, 
        {"3", "15,4", "shop", "cash", "16/02/2017}, 
        {"1", "11,3", "gym", "visa", "10/01/2016} }; 

は2列目(降順)で配列をリストです。

{"1", "11,3", "gym", "visa", "10/01/2016} 
{"3", "15,4", "shop", "cash", "16/02/2017} 
{"5", "22,2", "car payment", "visa", "21/04/2016} 

が、私はこのような何かを試してみました:

for (int i = 0; i < array.length; i++){ 
    for (int j = 0; j < array[i].length; j++) { 
    if (Float.valueOf(array[i][1]) > Float.valueOf(array[i+1][1])) { 
     temp = array[j+1]; 
     array[j+1] = array[j]; 
     array[j] = temp; 
    } 
    } 
} 

は、しかし、失敗のようですので、私の列挙された配列は次のようなものでなければなりません。どこが間違っていますか?

ありがとうございます!

答えて

1

バブルソートと選択ソートの間に奇妙なミックスをコーディングしました。比較は、array[i][1]array[j][1]間にないarray[i][1]array[i+1][1]すべきである:

if (Float.valueOf(array[i][1]) > Float.valueOf(array[j][1])) 

これはドット小数セパレータfloatのために働くべきです。カンマ小数点記号で浮動小数点数を解析する必要がある場合は、this Q&Aを使用します。

0

リファクタリングのみ1Dアレイの2次元配列(あなたが首の痛みを保存することができます...)、その後は、Arrays.sortを使用して、すべての行

の要素2を比較することができます自身のコンパレータを渡します例:

public static void main(String[] args) { 
    String[] array = { "\"5\", \"22,2\", \"car payment\", \"visa\", \"21/04/2016\"", 
      "\"3\", \"15,4\", \"shop\", \"cash\", \"16/02/2017\"", "\"1\", \"11,3\", \"gym\", \"visa\", \"10/01/2016\"" }; 
    Arrays.sort(array, new Comparator<String>() { 

     @Override 
     public int compare(String o1, String o2) { 
      return o1.split(",")[1].compareTo(o2.split(",")[1]); 
     } 
    }); 
    System.out.println(Arrays.toString(array)); 
} 

これは(私はフィールドの名前だと思います。)

+0

私はそれを行うのが大好きだ「価格」で配列をソートしますが、私は5を混合することにより、2次元配列を取得します配列を一つにする。 私はすべてのフィールドを配列を使って取得します(入力の場合は1、価格の場合は1、カテゴリの場合は1、支払いタイプの場合は1、日付の場合は1)。そして、私はこれらのすべてをこの最終的なString配列に入れます。 –

関連する問題