2017-12-15 18 views
-2

3つの乱数を抽出する小さなプログラムを作成していますが、唯一の条件は3つの数値すべてが互いに異なる必要があります。たとえば、3,9,3は受け入れられません。Javaの乱数は異なる必要があります

これは私のコードで、私はそれを数回試してみて、時には互いに等しい数を表示します。

私のコードで何が間違っていますか?

public class Premi { 
public static void main(String[] args) { 
    int num = (int) (Math.random() *10) + 1; 
    int num2 = (int) (Math.random() *10) + 1; 
    int num3 = (int) (Math.random() *10) + 1; 
    boolean first = true; 
    boolean second = true; 
    boolean third = true; 
    while(first) { 
     if (num!=num2) { 
      first=false; 
     } else if (num==num2) { 
      num = (int) (Math.random() *10) + 1; 
     } 
    } 
    while(second) { 
     if (num!=num3) { 
      second=false; 
     } else if (num==num3) { 
      num = (int) (Math.random() *10) + 1; 
     } 
    } 
    while(third) { 
     if (num2!=num3) { 
      third=false; 
     } else if (num2==num3) { 
      num2 = (int) (Math.random() *10) + 1; 
     } 
    } 
    System.out.println(num + "," + num2 + "," + num3); 
} 
} 

ありがとうございます。

+0

デバッグを行う必要があります。 –

+0

リストを作成します。このリストの長さは '<3 'ですが、ランダムな整数を生成します。それがリストにある場合は、繰り返し実行してください。そうでない場合は、リストに追加します。なぜこのようなチェックはすべて? – Nepho

+0

私はそれを見つけましたが、見つけられませんでした –

答えて

1

ここでSetを使用すると、数字が繰り返されないことが保証されます。あなたは(私は、有効な技術を使用することが学生を禁止コースの私の意見を留保します)任意のコレクションや配列を使用することが許可されていない場合

そして、あなたが使用することができます。

int n1 = (int) (Math.random() * 10) + 1; 
int n2; 
do { 
    n2 = (int) (Math.random() * 10) + 1; 
} while (n2 == n1); 
int n3; 
do { 
    n3 = (int) (Math.random() * 10) + 1; 
} while (n3 == n2 || n3 == n1); 

doループが保証されています少なくとも1回は走る

+0

はい、私はこのコードを使用することはできません。なぜなら、私は最初の広告のためにJavaを勉強しています。私は自分の本の第5章にあります。今は本がサイクルとif-elseの反復について説明されています –

+0

あなたは、 'Collection'sはまったく使用できません。配列はどうですか? –

+0

いいえ、必要な場合はサイクルのみまたはif-else –

関連する問題