2016-08-04 19 views
-3

指定した数字のリストに2つの数字を生成したい。私はこのコードを書いたが、うまくいきません。誰かがより良い解決策を提案できますか?指定された数字のリストから2つの数字を生成

public classl { 

    public static void main(String[] args) { 

     int[] lottery = new int[2]; 
     int randomNum; 

     for (int i = 0; i < 3; i++) { 
      randomNum = (int) (Math.random() * (3,9,25,41,43,50,68)); // Random  number created here. 
      for (int x = 0; x < i; x++) { 
       if (lottery[x] == randomNum) // Here, code checks if same random number generated before. 
       { 
        randomNum = (int) (Math.random() * (3,9,25,41,43,50,68));// If random number is same, another number generated. 
        x = -1; // restart the loop 
       } 

      } 
      lottery[i] = randomNum; 
     } 

     for (int i = 0; i < lottery.length; i++) 
      System.out.print(lottery[i] + " "); 
     } 

    } 
} 
+2

'Math.random()*'の後にカンマ区切りのリストがあるのはなぜですか? –

+0

質問に答えてコード内のすべてのエラーに対処するには、基本的にはJavaプログラミング言語の紹介を提供する必要があります。スタックオーバーフローが発生しないタスク。 –

答えて

0

あなたは、このような配列では、これらの番号を保存することができます

int[] arr = {12, 13, 4, 7, 9}; 

その後編曲:アレイ上の乱数を取得:だ

int rndNumber = new Random().nextInt(arr.length); 

はあなたのためにいくつかのアイデアですあなたの問題を解決してください。

+1

私はOPがこれより多くの助けを必要とすると思います。 –

0

私はあなたがコレクションから任意の数のランダムな要素を選択する方法を尋ねていると思います。

これが正しい場合は、コレクションには便利な方法があるので、配列ではなくコレクションから開始するのが最良です。

List<Integer> theNumbers = Arrays.asList(3, 9, 25, 41, 43, 50, 68); 
Random random = new Random(); 

// using uniqueness of sets 
Set<Integer> results = new HashSet<>(); 
while (results.size() < 2) 
    results.add(theNumbers.get(random.nextInt(theNumbers.size())); 

// using shuffle 
Collections.shuffle(theNumbers); 
List<Integer> results = theNumbers.sublist(0, 2); 

// using streams (Java 8) 
int[] results = random.ints(0, theNumbers.size()) 
    .map(theNumbers::get).distinct().limit(2).toArray(); 

他にもたくさんの方法がありますが、これが始まるとうまくいきます。

0

スプリントの答えはエレガントなやり方です。私は宝くじの番号を格納するためにINT []を使用して奨励していません:あなたは難しいあなたは私たちがこの

import java.util.HashSet; 
import java.util.Random; 
import java.util.Set; 

public class LotteryGenerator { 

    public static void main(String[] args) { 

     //declare specified list of numbers 
     int[] lotteryBank = {3, 9, 25, 41, 43, 50, 68}; 
     //get lottery numbers 
     int[] lottery = getLottery(lotteryBank); 

     System.out.println("The two lottery numbers are : [" + lottery[0] + ", " + lottery[1] + "]"); 

    } 

    public static int[] getLottery(int[] lotteryBank) { 
     //find the total number of elements, so that random number generated is one among these 
     int indexRange = lotteryBank.length; 
     //create an array to hold two random numbers 
     int[] lottery = new int[2]; 
     //create an instance of Random 
     Random r = new Random(); 
     //create a set to hold two unique random numbers 
     Set<Integer> randomSet = new HashSet<Integer>(); 

     //iterate till two unique random numbers are found 
     while(randomSet.size() != 2) { 
      //get a random index 
      int randomIndex = r.nextInt(indexRange); 
      //add the element at random index to the set 
      randomSet.add(lotteryBank[randomIndex]); 
     } 

     //convert random set to random array 
     int index = 0; 
     for(int x : randomSet) { 
      lottery[index++] = x; 
     } 
     return lottery; 
    } 
} 

注意を達成方法を理解するのに役立つはずです例を、以下、初心者としてそれを理解している場合。実際には、プリミティブ配列を使うのではなく、Java提供のコレクションを使用してください。これは、スプリントによって指し示された多くのユーティリティメソッドが付属しています。この解決策は、あなたのアプローチがどのように傾いていくかを示すことを目的としています

関連する問題