ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

Javaの課題丸投げコミュの二次元配列について教えてください

  • mixiチェック
  • このエントリーをはてなブックマークに追加
Javaの二次元配列で配列の中身ではなく、行をランダムに入れ替えるにはどうすればいいですか?知ってる人いたら教えてください。
1 1 1 1
2 2 2 2
3 3 3 3
4 4 4 4

2 2 2 2
4 4 4 4
3 3 3 3
1 1 1 1
こんな感じにしたいです。
ランダムでの入れ替えで教えてください。

コメント(9)

回答先間違えたのでコピペ
元のトピは規約違反なので消したほうがよいかと…

1 2011年11月22日 14:00

チュン様@オルコッ党
あえて無駄なことをやってみる…
うーん、いまいちだなぁ。
自分でもなんでこんな面倒な事やったのか理解できん(笑)

import java.lang.reflect.Array;
import java.util.*;

public class Program {

/**
* @param args
*/
public static void main(String[] args) {

int[][] tmp = {
{ 1, 1, 1, 1, 1 },
{ 2, 2, 2, 2, 2 },
{ 3, 3, 3, 3, 3 },
{ 4, 4, 4, 4, 4 },
};

Random rnd = new Random(System.currentTimeMillis());
List<int[]> tmpList= new ArrayList<int[]>(Arrays.asList(tmp));
List<int[]> tmpList2=Arrays.asList(tmp);
for(int i=0;i<tmpList2.size();i++){
int rnd_int=rnd.nextInt(tmpList.size());
tmpList2.set(i,tmpList.get(rnd_int));
tmpList.remove(rnd_int);
}
return;
}

}

2 2011年11月22日 14:10

チュン様@オルコッ党
別解
うーん、もっと簡単にならんかな…

import java.util.*;

public class Program {

/**
* @param args
*/
public static void main(String[] args) {

int[][] tmp = {
{ 1, 1, 1, 1, 1 },
{ 2, 2, 2, 2, 2 },
{ 3, 3, 3, 3, 3 },
{ 4, 4, 4, 4, 4 },
};
int[][] tmp2=new int[tmp.length][];
for(int i=0;i<tmp2.length;i++)tmp2[i]=null;
Random rnd = new Random(System.currentTimeMillis());
for(int i=0;i<tmp.length;){
int rnd_int=rnd.nextInt(tmp.length);
if(tmp2[rnd_int]!=null)continue;
tmp2[rnd_int]=tmp[i];
i++;
}
return;
}

}

3 2011年11月22日 14:18

MSK
Macのターミナルで表示させたいんですけど、どうすればいいですか?

4自分のコメントを削除する 2011年11月22日 14:19

チュン様@オルコッ党
更にもう一つ
swapを4回かけるだけ

import java.util.*;

public class Program {

/**
* @param args
*/
public static void main(String[] args) {

int[][] tmp = {
{ 1, 1, 1, 1, 1 },
{ 2, 2, 2, 2, 2 },
{ 3, 3, 3, 3, 3 },
{ 4, 4, 4, 4, 4 },
};
int[][] tmp2=new int[tmp.length][];
for(int i=0;i<tmp2.length;i++)tmp2[i]=null;
Random rnd = new Random(System.currentTimeMillis());
for(int i=0;i<tmp.length;i++){
int rnd_int=rnd.nextInt(tmp.length);
int[] hoge=tmp[i];
tmp[i]=tmp[rnd_int];
tmp[rnd_int]=hoge;
}
return;
}

}

5 2011年11月22日 14:24

チュン様@オルコッ党
あ・・・
コミュ参加者の皆さんすみません…
課題丸投げの方とマルチだったのでこっちの方に間違えて書きこんでました。
質問単独トピはコミュ規約違反でしたね…
申し訳ないです。

丸投げの方にでもコピペしときます。
短さで勝負w


import java.util.*;

public class Mixi {
  public static void main(String[] args) {

    int[][] tmp = {
      { 1, 1, 1, 1, 1 },
      { 2, 2, 2, 2, 2 },
      { 3, 3, 3, 3, 3 },
      { 4, 4, 4, 4, 4 },
    };
    
    List<int[]> list = Arrays.asList(tmp);
    Collections.shuffle(list);
    tmp = list.toArray(new int[list.size()][]);
    
    // debug
    for(int[] tm : tmp) {
      for(int t: tm) {
        System.out.print(t + " ");
      }
      System.out.println();
    }
  }
}
Collectionクラスにそんな便利なメソッドがあったとは!?
まだまだ勉強が足りない…
自分のソースは全部無駄じゃんww
Collections#shuffle

あるのは知ってたけど、実際に使ったことはなかった。
ランダムに入れ替えてって要件ないしなぁ。
ゲームとかで使うのかな。
配列の配列、一般化すると行列と言います。
実際のところ、出題の意図が分からないので私には答えられないのですが、
Matrix2Dというクラスを作るという、イヤミな回答を私ならすると思います。
>(コ´ω`ジ)ノさん
そういえば、Arrays.asListでリスト化して値を変更したときは元の配列も変更されるのでtmp=list.toArrayはなくてもいけると思います。
このメソッド本当にいつ使うんだろう…
カードゲームのシャッフルとか?
教えてくださってありがとうございました。
>チュン様@オルコッ党さん
ホントだ。
Listを配列にって思い込みが。。。

なので
tmp = list.toArray(new int[list.size()][]);
は削除で。

上記を踏まえて最短は
Collections.shuffle(Arrays.asList(tmp));
の1行でw。
単純に次のようにして行を入れ替えられるという基本的なことが理解できたのかな?
int t[] = tmp[3];
tmp[3] = tmp[1];
tmp[1] = t;

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

Javaの課題丸投げ 更新情報

Javaの課題丸投げのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング