2016-08-04 2 views
-3

Я хочу сгенерировать два числа в указанном списке чисел. Я написал этот код, но он не работает. Может ли кто-нибудь предложить лучшее решение?Сгенерируйте два числа из указанного списка чисел

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

ответ спринтера - это элегантный способ сделать. Если вам трудно понять, как новичок, следующий пример поможет вам понять, как мы достигаем этого

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; 
    } 
} 

Примечание: Я не поощряю с помощью INT [] для сохранения номера лотереи. На самом деле, не используйте примитивные массивы, скорее используйте сборники java, которые поставляются с множеством полезных методов, как указано sprinter. Это решение предназначено только для того, чтобы показать вам, как это можно сделать так, как ваш подход склоняется к

Смежные вопросы