Doctor Oz Logan
Doctor Oz Logan

Reputation: 3

Lottery program numbers generator

I am making a lottery simulation for my class project and I can not get it to not repeat the same numbers. All else is working fine, but I've tried several ways of getting it to not repeat numbers that have already been drawn but I just cant get it working. I'm fairly new at this.

class Lotto
{
    public static void main(String[]args)
    {
        System.out.print("Hvor mange rekker vil du spille?: ");
        Scanner lesInn= new Scanner(System.in);// Gir brukeren mulighet til å taste inn antall rekker de vil spille. (How many tickets)  
        int nummer = lesInn.nextInt();
        System.out.println("Lotto tallene er: ");
        System.out.println();
        for(int i=0; i<nummer; i++)
        {
            int[] lottoNummer = trekk();
            System.out.print(lottoNummer[1] + " " );
            System.out.print(lottoNummer[2] + " " );
            System.out.print(lottoNummer[3] + " " );
            System.out.print(lottoNummer[4] + " " );
            System.out.print(lottoNummer[5] + " " );
            System.out.print(lottoNummer[6] + " " );
            System.out.print(lottoNummer[7] + " " );
            System.out.print("Tilleggstall:(" + lottoNummer[7] + ")");
            System.out.println();
        }//for
    }//main

    public static int[] trekk()
    {
        int[] lottoNummer = new int[8];
        {
            lottoNummer[1] = (int) ((34 * Math.random()) + 1);
            lottoNummer[2] = (int) ((34 * Math.random()) + 1);
            lottoNummer[3] = (int) ((34 * Math.random()) + 1);
            lottoNummer[4] = (int) ((34 * Math.random()) + 1);
            lottoNummer[5] = (int) ((34 * Math.random()) + 1);
            lottoNummer[6] = (int) ((34 * Math.random()) + 1);
            lottoNummer[7] = (int) ((34 * Math.random()) + 1);
        }
        bubbleSort(lottoNummer);
        return lottoNummer;
    }//trekk

    public static void bubbleSort(int[] x)
    {
        int k, y, i;
        for( y = 1; y <= x.length -1; y++)
        for( i= 0 ; i <= x.length -2; i++)
        {
            if (x[i] > x [i+1])
            {
                k = x[i];
                x[i]= x[i+1];
                x[i+1] = k;
            }// if
        }//for
    }//bubbleSort
}//class

Upvotes: 0

Views: 253

Answers (1)

issverg
issverg

Reputation: 80

I prefer to use the Stream API in that case. So as i think it should be so:

    public static void main(String[] args) {
        System.out.print("Hvor mange rekker vil du spille?: ");
        Scanner lesInn = new Scanner(System.in);
        int nummer = lesInn.nextInt();
        System.out.println("Lotto tallene er: ");
        System.out.println();
        for (int i = 0; i < nummer; i++) {
            int[] lottoNummer = trekk();
            System.out.print(lottoNummer[1] + " ");
            System.out.print(lottoNummer[2] + " ");
            System.out.print(lottoNummer[3] + " ");
            System.out.print(lottoNummer[4] + " ");
            System.out.print(lottoNummer[5] + " ");
            System.out.print(lottoNummer[6] + " ");
            System.out.print(lottoNummer[7] + " ");
            System.out.print("Tilleggstall:(" + lottoNummer[7] + ")");
            System.out.println();
        }
    }

    public static int[] trekk() {
        return new Random().ints(1, 35).distinct().limit(8).sorted().toArray();
    }

Creating a random stream of integers where the first digit is for min value, the last one for max value. Distinct is for making only unique numbers, Limit is for limiting size of an array and Sorted is obviously for sorting. And then mapping it to an array and returning.

Actually, I would like to refactor a little bit your code if you don't mind, this way:

public static void main(String[] args) {
        System.out.print("Hvor mange rekker vil du spille?: ");
        Scanner lesInn = new Scanner(System.in);
        int nummer = lesInn.nextInt();
        System.out.println("Lotto tallene er: ");
        System.out.println();

        for (int i = 0; i < nummer; i++) {
            int[] lottoNummer = trekk();
            for (int num : lottoNummer) {
                System.out.print(num + " ");
            }
            System.out.print("Tilleggstall:(" + lottoNummer[lottoNummer.length - 1] + ")");
            System.out.println();
        }
    }

    public static int[] trekk() {
        return new Random().ints(1, 35).distinct().limit(8).sorted().toArray();
    }

Upvotes: 1

Related Questions