0

I think that the beginning of the code is right. The method containsNumber() is my weakness. I get 7 different lottery numbers (as I should and this is correct) when checking the code, but my checking program says that I fail when returning true/false value.

import java.util.ArrayList;
import java.util.Random;

public final class LotteryNumbers {
    private ArrayList<Integer> numbers;
    private Random random = new Random();

public LotteryNumbers() {
        // We'll format a list for the numbers
        this.numbers = new ArrayList<Integer>();
        // Draw numbers as LotteryNumbers is created
        this.drawNumbers();
    }

    public ArrayList<Integer> numbers() {
        return this.numbers;
    }

    public void drawNumbers() {


        while (numbers.size() <7){
            int number = random.nextInt(39)+1;
                if (containsNumber(number)==true){
            this.numbers.add(number);

        }}

        // Write the number drawing here using the method containsNumber()
    }

Here is my main problem and i get FAIL when checkin the code: "The method containsNumber() returns false, despite the drawn number was among the list of drawn numbers: 15"

    public boolean containsNumber(int numberi) {

        if (!this.numbers.contains(numberi)){

            return true;


          }
        return false;

    }
}

My main program:

import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {
        LotteryNumbers lotteryNumbers = new LotteryNumbers();
        ArrayList<Integer> numbers = lotteryNumbers.numbers();

        System.out.println("Lottery numbers:");
        for (int number : numbers) {
            System.out.print(number + " ");
        }
        System.out.println("");
    }
}
  • Instead of doing it this way, create a set of all the possible single lotto numbers (balls), *shuffle* the resulting sequence, and take the first n numbers (balls). Here is a [similar answer I wrote](http://stackoverflow.com/questions/19600435/generating-2-random-numbers-that-are-different-c-sharp/19600574#19600574) (it's for C#, but the same approach and discusses "why") and then [see this answer](http://stackoverflow.com/a/16112578/2864740) for a shuffle in Java. – user2864740 Dec 04 '13 at 06:27

1 Answers1

2

It works as you ask it to work. But you wanted:

public boolean containsNumber(int numberi) {
    return this.numbers.contains(numberi);
}

first part of code must be corrected too:

public void drawNumbers() {
    while (numbers.size() <7){
        int number = random.nextInt(39)+1;
        if (!containsNumber(number)){
            this.numbers.add(number);
        }
    }
....
weisert
  • 185
  • 5