Programme de loterie Java, ayant du mal à comparer les sorties


Je dois faire un programme de "loterie instantanée" dans mon premier cours d'informatique. Tout le semestre, mon professeur a lu mot pour mot le livre, alors maintenant je suis un peu perdu, honnêtement. Je sais comment en faire la majeure partie, mais j'ai juste du mal à comprendre le tri des tableaux et comment comparer l'entrée utilisateur et la sortie du nombre aléatoire. Mon professeur refuse de répondre aux questions sur les devoirs à domicile et a interdit l'utilisation de tout sauf: tableaux, boucles et mathématiques.aléatoire - donc pas d'ensembles ou quelque chose de plus complexe qui pourrait aider. J'ai vu d'autres programmes qui compilent, mais tous avec des ensembles.

J'ai le code pour l'entrée utilisateur des numéros de loterie et pour générer la sortie des nombres aléatoires. Je peux probablement trouver comment imprimer le paiement avec if/else. J'ai juste besoin de savoir comment obtenir le programme compare les nombres à un chiffre si l'utilisateur est un "gagnant" ou pas.

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

Le programme final devrait avoir l'utilisateur entrent 6 nombres, le programme comparent nombres de matchs, de déterminer si l'utilisateur est un "gagnant", de montrer le prix et la chose est de montrer comment ils passé (chaque "billet" est $1) vs combien ils ont gagné. Jusqu'à présent, tout ce qui sort est le scanner et les nombres aléatoires

Author: Popeye, 2019-04-22

2 answers

Il semble que vous ayez obtenu six nombres, puis que vous ne les ayez pas utilisés. Votre tableau de loterie est automatiquement initialisé à zéro. Je pense que vous essayez de comparer un tableau avec des entrées dans un tableau aléatoire, vous avez donc besoin d'une boucle pour mettre vos valeurs entrées. Après cela, initialisez votre tableau aléatoire, puis comparez simplement les tableaux.

        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();
         }
 1
Author: szoore, 2019-04-22 16:04:05

La question spécifique a à voir avec la façon de faire la comparaison et de déterminer un "gagnant". On ne sait pas ce qui fait la définition de "gagnant".

Sur la base de mon commentaire, et comme indiqué dans la réponse de @szoore, j'utiliserais un tableau pour collecter l'entrée. J'utiliserais une méthode pour collecter (car on peut changer pour utiliser une méthode différente pour les sélections, ce qui facilite les tests).

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

L'OP a une génération de base pour les numéros de loterie, mais encore une fois j'utiliserais une méthode. Ce a un léger raffinement de la vérification en double, en utilisant une méthode, et permet également à la même méthode de vérification en double d'être utilisée ultérieurement pour vérifier les correspondances:

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

L'utilisation de la méthode 'numberInArray' permet alors de vérifier assez facilement combien de nombres correspondent:

    // 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);

Détermination des paiements, etc. est le transfert direct en utilisant if/else ou (peut-être mieux) un switch basé sur le nombre de correspondances.

De plus, les entrées et les sélections de loterie devraient probablement être triées. Il n'est pas clair si le tri intégré peut être utilisé ou non. Écrivez la méthode sort comme approprié:

/**
 * 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();
}

Échantillon 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
    //
}
 0
Author: KevinO, 2019-04-22 16:20:23