генератор случайных чисел Java без массивов - PullRequest
0 голосов
/ 07 ноября 2018

Я совершенно новичок в Java и работаю над заданием. Мне нужно сгенерировать 6 случайных чисел в диапазоне от 1 до 49, что просто. Однако сложность заключается в том, что числа не могут дублироваться. Единственные опции, которые у меня есть для условий, - это цикл while или операторы if else. Массивы и все остальные циклы для этого назначения запрещены. Могли бы действительно воспользоваться некоторыми советами относительно логистики того, как применять имеющиеся у меня варианты. Без массивов и других циклов я понимаю, что у меня будет много повторяющегося кода, но я могу справиться с этим. Мне просто нужна помощь, чтобы обдумать это.

Ответы [ 5 ]

0 голосов
/ 08 ноября 2018

Если вы не можете использовать массивы или другие коллекции, вы можете создать 6 переменных, чтобы сохранить ваши генерируемые числа.

public class Generate6Number {

public static void main(String[] args) {
    int num1 = 0;
    int num2 = 0;
    int num3 = 0;
    int num4 = 0;
    int num5 = 0;
    int num6 = 0;

    int count = 0;

    while (count < 6) {
        int numGen = (int) (Math.random() * 49);

        if (numGen != num1 &&
            numGen != num2 &&
            numGen != num3 &&
            numGen != num4 &&
            numGen != num5) {
            if (num1 == 0)
                num1 = numGen;
            else if (num2 == 0)
                num2 = numGen;
            else if (num3 == 0)
                num3 = numGen;
            else if (num4 == 0)
                num4 = numGen;
            else if (num5 == 0)
                num5 = numGen;
            else 
                num6 = numGen;

            count++;
        }
    }   

    System.out.println("Number 1: " + num1);
    System.out.println("Number 2: " + num2);
    System.out.println("Number 3: " + num3);
    System.out.println("Number 4: " + num4);
    System.out.println("Number 5: " + num5);
    System.out.println("Number 6: " + num6);

}

}
0 голосов
/ 07 ноября 2018

Вам фактически нужно вынести уже выбранную возможность:

Random rand = new Random();
int first = rand.nextInt(49) + 1;
int second = rand.nextInt(48) + 1;
int third = rand.nextInt(47) + 1;
int fourth = rand.nextInt(46) + 1;
int fifth = rand.nextInt(45) + 1;
int sixth = rand.nextInt(44) + 1;

if (first <= second) second++;
if (first <= third) third++;
if (first <= fourth) fourth++;
if (first <= fifth) fifth++;
if (first < sixth) sixth++;

if (second <= third) third++;
if (second <= fourth) fourth++;
if (second <= fifth) fifth++;
if (second <= sixth) sixth++;

if (third <= fourth) fourth++;
if (third <= fifth) fifth++;
if (third <= sixth) sixth++;

if (fourth <= fifth) fifth++;
if (fourth <= sixth) sixth++;

if (fifth <= sixth) sixth++;
0 голосов
/ 07 ноября 2018

как тасование карты за первые 6

public void shuffle() {
    int[] array = new int[49];
    for (int i = 0; i < array.length; i++) {
        array[i] = i + 1;
    }

    // we need first 6 random cards
    for (int i = 0; i < 6; i++) {
        int index = (int) (Math.random() * (( array.length - i) + 1));
        int temp = array[i];
        array[i] = array[index];
        array[index] = temp;
    }

    for (int i = 0; i < 6; i++) {
        System.out.print("[" + array[i] + "]");
    }
    System.out.println();
}
0 голосов
/ 07 ноября 2018

Это кажется довольно странным упражнением для попытки без массивов. Это возможно, но я не думаю, что это особенно поучительно для изучения Java, так как это скорее математическое упражнение, чем программирование.

Чтобы сгенерировать 6 различных случайных чисел в диапазоне 1-49, вам в основном нужно решить для каждого из этих 49 чисел, выбирать его или нет, с ограничением, что вы выберете только 6 чисел. Итак, вы ищете, чтобы определить одну из choose(49, 6) возможных комбинаций.

Итак, вы можете сделать это так:

int numToPick = 6;
for (int i = 1; i <= 49; ++i) {
  if (shouldPick(i, numToPick)) {
    System.out.println(i);
    --numToPick;
  }
}

(я использовал цикл for; но вы всегда можете переписать цикл for как цикл while, если это все, что вы можете использовать).

Вопрос только в том, как реализовать эту функцию shouldPick: она возвращает логическое значение true, означающее, что вы должны выбрать ее, и напечатает ее; или false, чтобы означать, что вы не будете.

Это будет вероятностная функция (т.е. он будет использовать генератор случайных чисел), или он не будет каждый раз давать разные наборы чисел.

Математика для определения формы этой функции довольно забавная, а окончательная реализация - тривиально; но было бы неинтересно, если бы я дал здесь ответ.

(Но я могу заверить вас, что я это реализовал, изменив только одну строку в приведенном выше фрагменте; 2, если вы считаете объявление генератора случайных чисел).

0 голосов
/ 07 ноября 2018
Set<Integer> values = new HashSet<>();
Random rand = new Random();

while (values.size() <= 6) {
    int  n = rand.nextInt(50) + 1;
    values.add(n);
}
System.out.println(values);
...