• ベストアンサー

Javaで配列のソートを行ったとき、その要素を得る

こんにちは Javaで、 int[] arr=new int[]{3,1,5,4,6,2}; Arrays.sort(arr); で、一発で、大きさ順になるようですが、 このとき、大きさの番号順を得た得たいのですが int[] arr2=new int [7]; でarr2[1]=2;arr2[2]=6;arr2[3]=1;////という結果が得たいのですがそうするのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • asciiz
  • ベストアンサー率70% (6642/9410)
回答No.1

ご質問の意味をつかむのが難しかったのですが、つまり ・一番小さい数値「1」は『2番目』にあった ・2番目に小さい数値「2」は『6番目』にあった ・3番目に小さい数値「3」は『1番目』にあった …ということを知りたいわけですね? しかし、Arrays.sort(arr); を実行してしまった時点ではもう、実際に並び変わってしまいますから、それが以前どこに存在したかを示すものは、もうどこにもありません。 実際に実装するとすれば、 (1)並べ替える配列のコピーを作成しておく。(arr3) (2)ソート後、arr[1], arr[2], arr[3]…の各数値がarr3の何番目にあるか検索する。 みたいなことになるんじゃないでしょうか。 ただこの方法だと、要素内に同じ数値があった時、どちらもはじめに見つかった順位を表示しまうことになります。 例) {3,1,5,4,3,2,4}; をソートして、「3」が何番目にあったかというと、1番目の「3」も5番目の「3」も、最初に見つかった「1番目」という表示をするしかない。 それが都合悪いなら、「初めにどこにあった」という記録用の配列を用意して、{1,2,3,4,5…}で初期化し、Arrays.sort を使わず自分でソートプログラムを組んで、要素と順番記録の配列を一緒に並べ替えていく…そんなことをすればいいんじゃないでしょうか。

関連するQ&A

  • 配列をソートしたいです

    配列をソートしたいです ArrayクラスのsortOn()を使って、 「x座標の大きい順」に順番をならべ変えたいのですが 上手く行きません。。 現在、配列を使い 3つの矩形のSpriteを配置しています。 ↓現在のコード ===================================== var arr:Array = new Array(); for(var i:int=0; i<3; i++){  arr[i] = new Sprite();  with(arr[i].graphics){   beginFill(0x666666);   drawRect(0,0,8,8);   endFill();  }  arr[i].x = i*10;  addChild(arr[i]); } ===================================== 今、各Spriteのxプロパティは  arr[0].x = 0;  arr[1].x = 10;  arr[2].x = 20; になっているのですが、 これをソートして  arr[0].x = 20;  arr[1].x = 10;  arr[2].x = 0; にならべ変えたいのですが、 どのように書けばいいのかがわかりません。。 今、このように書いてるのですが arr.sortOn(arr.x, Array.NUMERIC); 並べ替えができません、 (おそらく arr.x が駄目なのだと思うのですが。。) どなたかご存知の方いらっしゃいましたら どうかよろしくお願いいたします。

    • ベストアンサー
    • Flash
  • JavaのArrays.sortについて教えてください

     Javaを勉強している初心者です。 次のプログラムはある学校のある学年の梅組の生徒5人のデータ(出席番号 no、氏名 name、身長 height)を 身長の低い順に並べ替えようとするものです。クラスMainでArrays.sort(ume);を実行するとどんな処理が行われるのか、またクラスStudentのメソッドcompareTo(Object o)はどう関係するのかご教示ください。 import java.util.Arrays; class Student implements Comparable { private int no; private String name; private double height; public Student(int no, String name, double height) { this.no = no; this.name = name; this.height = height; } public int compareTo(Object o) { double h1 = this.height; double h2 = ((Student)o).height; if(h1 == h2) { return 0; } else if(h1 > h2) { return 1; } else { return -1; } } } public class Main { public static void main(String[] args) { Student[] ume = new Student[5]; ume[0] = new Student(2, "木下 薫", 141.5); ume[1] = new Student(5, "湯水 敦", 145.0); ume[2] = new Student(1, "相田 徹", 152.5); ume[3] = new Student(4, "田中 大", 136.0); ume[4] = new Student(3, "橋 航", 145.0); Arrays.sort(ume); } }

  • javaに関する質問

    n個の整数値を入力し、それらの値を昇順に並べ替えるプログラムを書いたのですがエラーにより問題が発生しました。 問題は下記の実行例のように数字を,で区切り入力すると、エラーが発生し結果が表示されないという問題です。(Enterで改行するように区切ればエラーなく実行されます) 実行例として 整数値を入力してください。 1,5,7,3 ← 手入力部分 1,3,5,7 ← 実行結果 となれば正解のようです。 これが僕の書いたコードです。 package jp.javadrive; import java.util.Arrays; import java.util.Scanner; public class Java { public static void main(String[] args) { System.out.println("整数値を入力してください。"); @SuppressWarnings("resource") Scanner a = new Scanner(System.in); @SuppressWarnings("resource") Scanner b = new Scanner(System.in); @SuppressWarnings("resource") Scanner c = new Scanner(System.in); @SuppressWarnings("resource") Scanner d = new Scanner(System.in); int a1 = a.nextInt(); int b1 = b.nextInt(); int c1 = c.nextInt(); int d1 = d.nextInt(); int[] arr = new int[]{a1,b1,c1,d1}; Arrays.sort(arr); for(int i = 0;i < arr.length;i++) System.out.print(arr[i]); } } 初めてjavaを触った為、ググりながら書いていたので仕組みを分かっていないところがあるので、間違っている箇所があればどしどしご指摘お願いします。

    • ベストアンサー
    • Java
  • javaのソートについて。

    うまく文章で伝えられないかもしれませんがお願いします。 csvファイルの中に 名前、住所、電話番号、アドレス と入った一文が複数あるとします。 これを名前の50音順に並べたいのですが、 文字でもArrays.sortでソートは可能でしょうか? 一応やってみたのですがうまくいきませんでした。 さらに質問なんですが私はこのcsvファイルの一文を削除したり、変更したりというプログラムを作っています。 変更や削除の場合は一度配列に全ての文を入れてその後削除、変更を行った後に またファイルに書き込むという形をとっています。 この場合50音順に並べるには一度書き込みが終った後もう一度読み込んでソートをして 書き込みなおすしか方法はないのでしょうか? ご教授お願いします。

    • ベストアンサー
    • Java
  • Javaでキーボードから入力された文字列をソートするプログラムについて。

    Java初心者です。今回、タイトル通りのプログラムを作成する事になったのですが、 import java.io.*; import java.util.*; public class dicsort { public static void main(String args[]) throws NumberFormatException, IOException{ String[] diclist = new String[4]; BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); for(int i=1; i<diclist.length; i++){ System.out.print("ソートしたい単語を入力して下さい。"+i+"語目"); diclist[i] = in.readLine(); } Arrays.sort(diclist); System.out.println("答えは"); for(int n=1; n<diclist.length; n++){ System.out.println(diclist[n]); } System.out.println("である。"); } } というプログラムを実行したところ、 ソートしたい単語を入力して下さい。1語目あさ ソートしたい単語を入力して下さい。2語目さか ソートしたい単語を入力して下さい。3語目かさ Exception in thread "main" java.lang.NullPointerException at java.util.Arrays.mergeSort(Unknown Source) at java.util.Arrays.sort(Unknown Source) at dicsort.main(dicsort.java:11) というエラーが発生してしまいました。 ソートの部分で問題が起きているらしいのですが、自分では考えが凝り固まってしまい間違いが発見出来ません。 どなたか原因を教えて頂けないでしょうか、よろしくお願いします。

  • java 配列のソートについて

    JAVAを現在独学で勉強中ですが、わからないコードがあります。 プログラミングの先輩方、暇なときにでも教えてください。 for(int i=0; i<test.length; i++){ String str =br.readLine(); test[i] =Integer.parseInt(str); } for(int s=0;s<test.length-1;s++){ for(int t=s+1; t<test.length;t++){ if(test[t]>test[s]){ int tmp =test[t]; test[t] =test[s]; test[s]=tmp } } } 2回目のtest.length-1の-1はどういった役割を果たしてるんでしょうか? またjavaの構文の中でも、配列のソートがどうしても苦手です。 何かソートを理解するのにコツみたいなものがあれば、ご教授ください。 宜しくお願い致します。

    • ベストアンサー
    • Java
  • JAVA LIST ソート

    JAVA LIST ソート JAVAの初心者です。よろしくお願いします。 検索結果の一覧画面のデータを SORT ボタンをクリック時、JAVA側で セッションBEANに保持してる 画面一覧のLISTデータをあるキーでソートしたいですが、 わからなくて困ってます。 自分なり考えたのは、 ArrayList list = new ArrayList(); List.add(getSessionBean());ーーーセッションBEANのデータをリストに追加 Collections.sort(list, new MyComparator() ここで MyComparator()での書き方がよくわかりません。 もし、ソートキーが 複数あれば どうなりますか? サンプルなどがあれば、ご教授頂ければ幸いです。

  • 多次元配列のソートがうまくいかない

    多次元配列のソートがうまくいかない 質問失礼します. 以下のような,String型,int型,double型の混在した多次元配列([3][3]の配列)をソートするプログラムを作成しました. このプログラムでは3番目の項目でソートを行っています. 問題点なのですが, 3番目の項目がdouble型の一桁(例えばarray[1][2]が2.0)ならばうまくソートできるのですが, 一つを2桁(例えばarray[1][2]を10.0)にすると何故か先頭の数(10.0の場合1)を基準にソートされてしまっているようです・・・ 配列へのデータの入れ方が間違っているのでしょうか? 原因がはっきりわからず困っているのですが, わかる方いましたらよろしくお願いします. public class Sort_test { /** * @param args */ public static void main(String[] args) { // TODO 自動生成されたメソッド・スタブ String[][] array = new String[3][3]; array[ 0 ][ 0 ] = "A"; array[ 0 ][ 1 ] = 2001+""; array[ 0 ][ 2 ] = 9.0+""; array[ 1 ][ 0 ] = "B"; array[ 1 ][ 1 ] = 1001+""; array[ 1 ][ 2 ] = 2.0+""; array[ 2 ][ 0 ] = "C"; array[ 2 ][ 1 ] = 3001+""; array[ 2 ][ 2 ] = 6.0+""; TheComparator comparator = new TheComparator(); // 3番目の項目でソートするように設定 comparator.setIndex( 2 ); // ソート実施 Arrays.sort( array, comparator ); dump(array); } public static void dump( String[][] array ) { for ( int i = 0;i < array.length;i++ ) { for ( int j = 0; j < array[ i ].length;j++ ) { System.out.print( "\t" + array[ i ][ j ] ); } System.out.println(); } } } //多次元配列ソート用クラス class TheComparator implements Comparator { /** ソート対象のカラムの位置 */ private int index = 0; /** ソートするためのカラム位置をセット */ public void setIndex( int index ) { this.index = index; } public int compare( Object a, Object b ) { String[] strA = ( String[] ) a; String[] strB = ( String[] ) b; return ( strA[ index ].compareTo( strB[ index ] ) ); } }

    • ベストアンサー
    • Java
  • 100万個の整数のソート

    2491 482 112 .. 1044 のように、100万個の整数をテキストファイルから読み込んで、ソートするプログラムを作ることになりました。 これをjavaでやるのは現実的でしょうか? (1日で終わる?) java だと Arrays.sort というメソッドがあるとまでは聞いたのですが、個数が多くてもプログラムがちゃんと動くのか不安です。

    • ベストアンサー
    • Java
  • javaで配列の格納をしたいです。

    配列の格納がうまくいきません。 javaについて質問させて頂きます。 ユーザーが数字を入力し配列 atr[ i ]に格納され 配列 v[ i ] に v[ 0 ] = count ... v[ 143 ] = count ... v[ 144 ] = count - 1 ... v[ 287 ] = count - 1 ... ... v[ count-288 ] = 2 ... v[ count-145 ] = 2 ... v[ count-144 ] = 1 ... v[ count-1 ] = 1 と、格納されるようなプログラムを作っています。 for文で作ろうと考えたのですが count, count-1 , ... 3, 2, 1と値を入れようと思いましたがうまくコンパイルが通りませんでした。 エラーは以下になります。 a.java:48: シンボルを見つけられません。 シンボル: メソッド readLine(int) 場所 : java.io.BufferedReader の クラス value = br_v.readLine(atr[i]); もし宜しければアドバイスやご指摘を頂けませんでしょうか。 説明も拙い部分がありますが宜しければお願いします。 import java.io.*; import java.util.Arrays; class a { public static void main(String[] args) throws IOException { int atr[]; atr = new int[25]; int count = 0; BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); while(true){ //絶対に通る String str = br.readLine(); int res = Integer.parseInt(str); if(res == 0){ break; } else{ atr[count] = res; } count++; } for(int i=0; i<count; i++){ System.out.println(atr[i] + "が、選択されました。"); } int v[] = new int[25*144]; String value; try{ BufferedReader br_v = new BufferedReader(new InputStreamReader(System.in)); for(int i=count; i<count; i--){ value = br_v.readLine(atr[i]); v[i] = Integer.parseInt(value); } } catch(IOException e){ System.out.println("エラーです。"); } } }

専門家に質問してみよう