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 + "; ");
}
javaで配列
Re: javaで配列
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
-
daj
Re: javaで配列
返信ありがとうございます。
凡ミス(?)ですね・・・
コンパイルですが、直す前のコードも、直した後のコードもeclipseで普通に動いていましたが、どこか気になる部分があったでしょうか?
凡ミス(?)ですね・・・
コンパイルですが、直す前のコードも、直した後のコードもeclipseで普通に動いていましたが、どこか気になる部分があったでしょうか?
Re: javaで配列
投稿する時に最後の}を忘れていませんか?カッコの数が合っていないのです。daj さんが書きました: コンパイルですが、直す前のコードも、直した後のコードもeclipseで普通に動いていましたが、どこか気になる部分があったでしょうか?
-
かずま
Re: javaで配列
そのアルゴリズムで、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回で済みます。
最後の 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] + ";");
}
}