Программа лотереи Java, с трудностями при сравнении результатов - PullRequest
2 голосов
/ 22 апреля 2019

Мне нужно пройти программу «мгновенной лотереи» на моем первом уроке информатики.Весь семестр мой профессор читал дословно из книги, так что теперь я немного растерялся, если честно.Я знаю, как сделать большую часть этого, но у меня просто проблемы с вычислением сортировки массива и с тем, как сравнивать пользовательский ввод и вывод случайного числа.Мой профессор отказывается отвечать на вопросы о домашних заданиях и запретил использование чего-либо, кроме: массивов, циклов и математического случайного числа, так что нет наборов или чего-либо более сложного, что могло бы помочь.Я видел другие программы, которые компилируются, но все с наборами.

У меня есть код для ввода пользователем номеров лотереи и для генерации вывода случайных чисел.Скорее всего, я также могу выяснить, как распечатать выплату с if / else.Мне просто нужно знать, как заставить программу сравнивать числа и выяснить, является ли пользователь «победителем» или нет.

import java.util.Scanner;

public class TheLottery {

    public static void main(String[] args) {
        Scanner keyboard = new Scanner(System.in); //user input of their lottery numbers

        System.out.print("Enter number 1: ");
        int num1 = keyboard.nextInt();
        System.out.print("Enter number 2: ");
        int num2 = keyboard.nextInt();
        System.out.print("Enter number 3: ");
        int num3 = keyboard.nextInt();
        System.out.print("Enter number 4: ");
        int num4 = keyboard.nextInt();
        System.out.print("Enter number 5: ");
        int num5 = keyboard.nextInt();
        System.out.print("Enter number 6: ");
        int num6 = keyboard.nextInt();
    }


    int[] lottery = new int[6];
    int randomNum;
    {

    for (int i = 0; i < 6; i++) {
        randomNum = (int) (Math.random() * 50); // 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() * 50);// 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] + " "); //print random numbers
    }
}

в финальной программе пользователь должен ввести 6 цифр, программа сравнивает числа для матчей, выяснить, является ли пользователь «победителем», показать приз, а добавленная вещь - показать, сколькоони потратили (каждый «билет» - 1 доллар) против того, сколько они выиграли.Пока что все, что выводит это сканер и случайные числа

Ответы [ 2 ]

1 голос
/ 22 апреля 2019

Похоже, вы получили шесть чисел, а затем не использовали их.Ваш лотерейный массив автоматически обнуляется.Я думаю, что вы пытаетесь сравнить массив с входными данными со случайным массивом, поэтому вам нужен цикл для ввода введенных значений.После этого инициализируйте ваш случайный массив, затем просто сравните массивы.

        public static void main(System[] args) {
            Scanner in = new Scanner(System.in);

            int[] lottery = new int[6];

            System.out.println("Enter " + lottery.length + " numbers: ");
            for (int i = 0; i < lottery.length; i++) {
               lottery[i] = in.nextInt();
         }
0 голосов
/ 22 апреля 2019

Конкретный вопрос связан с тем, как сделать сравнение и определить «победителя».Непонятно, что дает определение «победитель».

На основании моего комментария и, как показано в ответе @szoore, я бы использовал массив для сбора входных данных.Я бы использовал метод сбора (так как можно выбрать другой метод для выбора, что облегчает тестирование).

/**
 * Obtain the specified number of entries from the user
 */
public static int[] getUserSelections(final int numSelections)
{
    Scanner in = new Scanner(System.in);

    // read N entries from the user
    int[] nums = new int[numSelections];

    // NOTE: no error processing in this loop; should be refined
    //   bad numbers (e.g., negative, too large), duplicate entries, etc.
    //     need to be removed
    for (int i = 0; i < numSelections; ++i) {
        System.out.print("Enter number " + (i + 1) + ": ");
        nums[i] = in.nextInt();
    }

    return nums;
}

ОП имеет базовое поколение для номеров лотереи, но опять жеЯ бы использовал метод.Это немного уточняет проверку дубликатов с помощью метода, а также позволяет впоследствии использовать тот же метод дубликатов проверки для проверки совпадений:

public static int[] getLotteryNumbers(final int numSelections)
{
    // the largest number to be selected; all numbers between
    //   1 and maxNum (inclusive) will have equal(-ish) probability
    //   of being generated
    final int maxNum = 50;

    int[] lottery = new int[numSelections];

    Random rnd = new Random();


    // make N random selections, and ensure we don't have duplicates
    for (int i = 0; i < numSelections; ++i) {
        boolean generate = true;
        while (generate) {
            int sel = rnd.nextInt(maxNum) + 1;
            generate = numberInArray(sel, lottery);
            if (! generate) {
                lottery[i] = sel;
            }
        }
    }

    return lottery;
}


/**
 * Returns true if the specific queryNum is found in the pastSelections
 *  Could be slightly optimized by passing how many selections have
 *  already been made
 */
public static boolean numberInArray(int queryNum, int[] pastSelections)
{
    // look at each element and see if already there; exit via return
    //  if so
    for (int i = 0; i < pastSelections.length; ++i) {
        if (pastSelections[i] == queryNum) {
            return true;
        }
    }

    return false;
}

Использование метода numberInArray позволяетдля довольно простой проверки количества совпадающих чисел:

    // see how many match
    int matches = 0;

    // see if the user entry exists in the lottery; if so, we
    //  have a match
    for (int i = 0; i < userEntries.length; ++i) {
        if (numberInArray(userEntries[i], lottery)) {
            ++matches;
        }
    }


    System.out.printf("Found %2d matches%n", matches);

Определение выплат и т. д. выполняется с помощью if/else или (возможно, лучше) switch в зависимости от количества совпадений.

Кроме того, записи и выбор лотереи, вероятно, должны быть отсортированы.Не ясно, может ли использоваться встроенная сортировка или нет.Напишите метод sort в зависимости от ситуации:

/**
 * Sorts the array; implement sorting as needed
 */
public static void sort(int[] arr)
{
    Arrays.sort(arr);
}

/*
 * outputs the array if one cannot use Arrays.toString(arr)
 */
public static void outputArray(int[] arr)
{
    for (int i = 0; i < arr.length; ++i) {
        System.out.printf("%2d ", arr[i]);
    }

    System.out.println();
}

Образец main:

public static void main(String[] args)
{
    // how many options for the lottery; here it is 6
    final int numEntries = 6;

    // this method obtains from user
    int[] userEntries;

    userEntries = getUserSelections(numEntries);

    sort(userEntries);

    // display User selections
    outputArray(userEntries);


    int[] lottery = getLotteryNumbers(numEntries);

    sort(lottery);

    // display lottery numbers
    outputArray(lottery);

    // see how many match
    int matches = 0;

    // see if the user entry exists in the lottery; if so, we
    //  have a match
    for (int i = 0; i < userEntries.length; ++i) {
        if (numberInArray(userEntries[i], lottery)) {
            ++matches;
        }
    }


    System.out.printf("Found %2d matches%n", matches);

    //
    // TODO: calculate winnings based upon the number of matches
    //
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...