• 締切済み

【java】compareTo

行き詰ってしまいました。どなたか教えてください。。。 Stringの2次元配列に、値段とタイトルが入ってます。 String[][] a = { {10500,A},{1280,B},{1300,C},{14980,D} } これを価格が安い順に表示したいです。 辞書式比較compareToを使いましだが、 10500、A 1280、B 1300、C 14980、D となってしまいます。 1280,B 1300,C 10500,A 14980,D と表示するためにはどうしたらいいでしょうか。 よろしくお願いします

  • Java
  • 回答数1
  • ありがとう数3

みんなの回答

回答No.1

class Q4569629A{ public static void main(String[] args){ String[][] a = { {"10500","A"},{"1280","B"},{"1300","C"},{"14980","D"} }; java.util.Arrays.sort(a,new Q4569629B()); for (int i = 0;i < a.length;i++){ System.out.println(a[i][0] + ":" + a[i][1]); } } } class Q4569629B implements java.util.Comparator<String[]>{ public int compare(String[] o1, String[] o2){ return Integer.parseInt(o1[0]) - Integer.parseInt(o2[0]); } public boolean equals(Object obj){ return this.equals(obj); } }

xxx2100
質問者

お礼

himajin100000さん、ご回答ありがとうございます。 参考にさせて頂き、問題は解決いたしました。 ありがとうございました。

関連するQ&A

  • 多次元配列のカウント+1の仕方

    多次元配列のカウント+1の仕方 下記のような多次元配列(ちなみに、これって二次元配列ですか?)があるとき、 常に、「2列目の0がある数+1」を返すようにしたいのですが、 どうすればよいのでしょうか? $data[0][1]とか$data[1][1]とか$data[2][1]とかの意味です。 下記の例でいくと、2列目に0が3つあるので、数値の4を返したいのですが…、 ■$data 1,0,A1,B1,C1 2,0,A2,B2,C2 3,0,A3,B3,C3 4,2,A4,B4,C4 ■var_dump($data); array(4) { [0]=> array(5) { [0]=> string(1) "1" [1]=> string(1) "0" [2]=> string(2) "A1" [3]=> string(2) "B1" [4]=> string(2) "C1" } [1]=> array(5) { [0]=> string(1) "2" [1]=> string(1) "0" [2]=> string(2) "A2" [3]=> string(2) "B2" [4]=> string(2) "C2" } [2]=> array(5) { [0]=> string(1) "3" [1]=> string(1) "0" [2]=> string(2) "A3" [3]=> string(2) "B3" [4]=> string(2) "C3" } [3]=> array(5) { [0]=> string(1) "4" [1]=> string(1) "2" [2]=> string(2) "A4" [3]=> string(2) "B4" [4]=> string(2) "C4" } }

    • ベストアンサー
    • PHP
  • 高1の数Aの問題です。

    数学の補習でわからないところがあったので、質問させていただきます。 問題;(1)HGAKUENの7文字から6文字を選んで文字列を作り、それを辞書式に配列するとき、      GAKUENは初めから数えて何番目の文字列か。ただし、同じ文字は繰り返して用いないもの      とする。    (2)異なる5文字A,B,C,D,Eを1つずつ、すべてを使ってできる順列を、辞書式配列法によって順に      並べるとき、63番目にあたる順列は何か。 答えは、(1)1508番目(2)CDBAEなんですが、なぜこの答えになるのかがわかりません。 回答お願いします。

  • Excel VBA 2次元配列の一部をセルに出す

    Excel VBAで2次元配列中の一つの次元をセルに一発(For等でループせずに)で縦方向に書きたいのですが、何か良い方法は有るでしょうか。 例 Dim tmp(2, 2) As String tmp(0, 0) = "A"     : tmp(0, 1) = "B"  :  tmp(0, 2) = "C" tmp(1, 0) = "D"    : tmp(1, 1) = "E"    : tmp(1, 2) = "F" tmp(2, 0) = "G"    : tmp(2, 1) = "H" :   tmp(2, 2) = "I"   セル B1 ~ B3 に tmp(1,0)~temp(1,2)の出力したい ( セル B1に D、セルB2に E、 セル B31に F が入る) Transposeをみたのですが、一次元配列が前提のようです。 2次元配列の要素の一つを一次元にする方法でも構いません。   よろしくお願いします。

  • 多次元配列の工夫

    現在、あるプログラミングを作成しています。 そこで4次元配列を使用することが必要になってきました。 ---------------------------------------------- 4次元空間 for(a=・・・a++){ for(b=・・・b++){ for(c=・・・c++){ for(d=・・・d++){ if(ある条件が揃った場合) jouken[a][b][c][d]++; }}}} ---------------------------------------------- 以上のようなことをやりたいのですが、 a~cの値は3桁オーダーなので、メモリを食いすぎ、 処理が桁違いに遅くなり(ページング発生?)、 困っています。 これの解決方法としてはどのようなものがありますかね?たとえば、2次元配列を複数個使うなど。 よろしくお願いします。

  • 配列から指定した値を取得する関数

    $itemから["a"]の値だけを取り出した配列を呼び出す関数を作成したいのですが、この様な配列の場合はどうしたら良いのでしょうか? $item var_dump( $item ); array(1) { [0]=> object(data)#1 (5) { ["a"]=> int(1) ["b"]=> string(1) "2" ["c"]=> string(7) "string1" ["d"]=> string(7) "string2" ["e"]=> string(8) "keyword1" } [1]=> object(data)#2 (5) { ["a"]=> int(3) ["b"]=> string(1) "4" ["c"]=> string(7) "string3" ["d"]=> string(7) "string4" ["e"]=> string(8) "keyword2" } }

    • ベストアンサー
    • PHP
  • Access VBA での配列

    Access VBAで下記のような配列(ジャグ配列?)を作りたいと考えています。 添字[0] = ("0A","0B","0C") 添字[1] = ("1A","1B","1C","1D") VB.NETでは下記のような感じで書けたと思います。 Dim strArray(1) As Object strArray(0) = New String(2) {"0A", "0B", "0C"} strArray(1) = New String(3) {"1A", "1B", "1C", "1D"} 分かりましたら是非教えてください。 お願いします。

  • 4次元空間の4つのベクトルが張る空間が1次元、2次元、3次元、4次元である条件

    4次元空間にゼロベクトルでない4つのベクトルを考えます。 a↑=(a[1],a[2],a[3],a[4]) b↑=(b[1],b[2],b[3],b[4]) c↑=(c[1],c[2],c[3],c[4]) d↑=(d[1],d[2],d[3],d[4]) とします。 これらのベクトルで張られる空間が1次元、2次元、3次元、4次元である条件を求めたいのです。 各ベクトルを並べて行列(a↑ b↑ c↑ d↑)を作り、基本変形で階数を計算するというアルゴリズムではなく、各成分の代数的な関係を求めたいのです。 4つのベクトルで張られる空間が4次元のとき、超体積が0ではないので、行列式 |a↑ b↑ c↑ d↑|≠0 4つのベクトルで張られる空間が1次元のとき、すべて平行なので、 a↑∥b↑∥c↑∥d↑ a[1]:a[2]:a[3]:a[4]=b[1]:b[2]:b[3]:b[4]=c[1]:c[2]:c[3]:c[4]=d[1]:d[2]:d[3]:d[4] (a[1]/a[4],a[2]/a[4],a[3]/a[4])=(b[1]/b[4],b[2]/b[4],b[3]/b[4]) =(c[1]/c[4],c[2]/c[4],c[3]/c[4])=(d[1]/d[4],d[2]/d[4],d[3]/d[4]) このあと、一つの式にする、つまり、イコールを一つだけにしてきたいのですが、複雑そうです。行列式またはシグマ記号を使って、表記できないでしょうか? 4つのベクトルで張られる空間が2次元、3次元のとき、それぞれの各成分にはどういった関係式があるのでしょうか?

  • 配列のソートと削除

    String型のstrToRemoveで与えられた文字列を配列から探し、あればそれ以降の配列の数字をすべて左にシフトします。 なので配列の大きさは1小さくなります。その結果の配列をreturnで返します。 例) ({"A","B","C","D","B"}, "B")配列1にBがあるのでそれ以降の文字列をすべて左にシフト→ {"A","C","D","B"} ({"A","B","C","D","B"}, "A") 配列0にAがあるのでそれ以降の文字列を左にシフト→ {"B","C","D","B"} プログラムは以下のように組みました。 public class ArrayFun { public String[] oneRemoved(String[] array, String strToRemove) { int count = 0; for (int i = 0; i < array.length; i++) {      if (strToRemove.equals(array[i]) && count == 0) {        for (int j = i; j < array.length - 1; j++) {          array[j] = array[j + 1];        }          count++;      } }      array = new String[array.length - 1];      array[array.length - 1] = null;      return array; } } ちなみにcountは、一度シフトすればもう同じ文字列がそれ以降の配列にあってもシフトはしないので、countでシフトしたかどうかを判断しようと思い付けました。 これでテストメソッドも作るのですが、 import static org.junit.Assert.*; import org.junit.Test; public class ArrayFunTest { @Test public void testoneRemoved() { ArrayFun af = new ArrayFun(); String[] a1 = {"A","B","C","D","B" };//元の配列 String[] a2 = {"A","BB","CCC","DDD","B"};//元の配列 String[] a3 = {"B","C","D","B"};//シフト後の配列 String[] a4 = {"A","BB","CCC","DDD","B"};//シフト後の配列 assertEquals(a3, af.oneRemoved(a1, "A")); assertEquals(a4, af.oneRemoved(a2, "NotHere")); } } 以上のように組むと、assertEqualsの真ん中に黒線が入って自動的に@SuppressWarnings("deprecation")が加えられてしまいます。 実行結果は、({"A","B","C","D","B"}, "A") の例だと、配列0にB が入るはずがnullになっている、とエラーがでます。 どのようにしたら正常に動かせるでしょうか?宜しくお願いします。

    • ベストアンサー
    • Java
  • 多次元配列の一次元目の最大値の求め方

    多次元配列の一次元目の最大値の求め方 下記のような多次元配列(ちなみに、これって二次元配列ですか?)があるとき、 常に、「一次元目の最大値+1」を返すようにしたいのですが、 どうすればよいのでしょうか? $data[0][0]とか$data[1][0]とか$data[2][0]とかの最大値の意味です。 下記の例でいくと、一次元目の最大値が3なので、数値の4を返したいのですが…、 ■$data 1,0,A1,B1,C1 2,5,A2,B2,C2 3,0,A3,B3,C3 3,2,A4,B4,C4

    • ベストアンサー
    • PHP
  • 文字の配列の置き換えなのですが、

    おはようございます。 文字の配列の置き換えなのですが、 セルB1=1 C1=2 D1=3 といった順に横に文字が入ってます。 この文字をA5にB1を、A6にC1を A7にD1を入れたいのですが、 どうづればいいのでしょうか?

専門家に質問してみよう