javaで配列

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
daj

javaで配列

#1

投稿記事 by daj » 13年前

javaです
かぶらないように10個の整数を、乱数を使用して出力するプログラムを以下のようにして作ってみたのですが失敗しています。
確認したところ、while文中のif(check[t]==0)が実質if(check==0)の動きにしかなっていないようなのですが、
どのように変えれば作りたい通りに動いてくれるでしょうか?


import java.util.Random;
public class Syanhai {
public static void main(String[] args){
Random rand=new Random();
int[] check=new int[10];
int[] t=new int[10];
int i;
for(i=0;i<10;i++)
check=0;
i=0;
while(i<10){
t=rand.nextInt(10);
if(check[t]==0){
check++;
i++;
}
}
for(i=0;i<10;i++)
System.out.print("t[" + i + "] = " + t + "; ");
}

アバター
みけCAT
記事: 6734
登録日時: 15年前
住所: 千葉県
連絡を取る:

Re: javaで配列

#2

投稿記事 by みけCAT » 13年前

コードはコードタグで囲んでください。
このコードだとコンパイルエラーが出ませんか?

コード:

check[i]++;

コード:

check[t[i]]++;
にすればいいのではないですか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

daj

Re: javaで配列

#3

投稿記事 by daj » 13年前

返信ありがとうございます。
凡ミス(?)ですね・・・

コンパイルですが、直す前のコードも、直した後のコードもeclipseで普通に動いていましたが、どこか気になる部分があったでしょうか?

アバター
h2so5
副管理人
記事: 2212
登録日時: 15年前
住所: 東京
連絡を取る:

Re: javaで配列

#4

投稿記事 by h2so5 » 13年前

daj さんが書きました: コンパイルですが、直す前のコードも、直した後のコードもeclipseで普通に動いていましたが、どこか気になる部分があったでしょうか?
投稿する時に最後の}を忘れていませんか?カッコの数が合っていないのです。

daj

Re: javaで配列

#5

投稿記事 by daj » 13年前

なるほど
投稿したコードは確かに}が足りなかったです
今後は気をつけます
ありがとうございました

かずま

Re: javaで配列

#6

投稿記事 by かずま » 13年前

そのアルゴリズムで、4 7 9 3 0 6 1 5 8 2 の乱数が得られたとしましょう。
最後の t[9] = 2 を求めようとして、rand.nextInt(10) を呼び出して
0~9 の乱数を発生させても、2 以外の値は check[] に引っかかって
欲しい 2 が出るまで何度も rand.nextInt(10) を呼び出すことになります。
t[8] を求める時も、残り 2つの値を得るために、rand.nextInt(10) を
何度も呼び出します。
10個の乱数全部を求めるのに、不定回数の乱数発生が必要で、
平均30回程度になるでしょう。

次のようにすれば、乱数発生は常に 9回で済みます。

コード:

import java.util.Random;

public class Syanhai {
    public static void main(String[] args){
        Random rand = new Random();
        int[] t = new int[10];
        int i;
        for(i = 0; i < 10; i++) t[i] = i;
        while (--i > 0) {
            int j = rand.nextInt(i + 1);
            int w = t[j]; t[j] = t[i]; t[i] = w;
        }
        for (i = 0; i < 10; i++)
            System.out.println("t[" + i + "] = " + t[i] + ";");
    }
}

閉鎖

“C言語何でも質問掲示板” へ戻る