1

I'm trying to generate an array of unique values but my first number is always 0, how can I fix this?

Random r = new Random();
Scanner in = new Scanner(System.in);
int generatedNumbers = 0;
int winningSum = 0;
int[] list = new int[10];

for (int number = 1; number < list.length; ++number) {
    list[number] = r.nextInt(99);

    for (int uniqueNumber = 0; uniqueNumber < number; ++uniqueNumber) {
        if (list[uniqueNumber] == list[number]) {
            list[number] = r.nextInt(99);
            uniqueNumber = 0;
        }
    }
}
int random_first = r.nextInt(99);)
for (int element : list) {
    System.out.println(element);
}
1

2 Answers 2

1

you need to start from zero, not one, in your for loop

Random r = new Random();
int[] list = new int[50];
for(int index = 0; index < list.length; index++) {
    int newNum = r.nextInt(99);
    outer:while(true){
        for(int i = 0;i<index;i++){
            if(list[i]==newNum){
                newNum = r.nextInt(99);
                continue outer;
            }
        }
        break;
    }
    list[index] = newNum;
    
}
for (int element: list) {
    System.out.println(element);
}
Sign up to request clarification or add additional context in comments.

4 Comments

It sometimes has non-unique results.
I fixed it but be careful because it can get stuck if it cannot find another number available so obviously make sure the list is small-ish
I think i <list.length may be i <index as OP does.
that would be more efficient yes
0

In your approach, you have three mistakes (that I noticed).

The first, this loop for (int number = 1; number < list.length; ++number) should start with zero. So, for (int number = 0; number < list.length; ++number).

The second, inner check for (int uniqueNumber = 0; uniqueNumber < number; ++uniqueNumber) { fails here uniqueNumber = 0; It should be uniqueNumber = -1.

And finally, you don't need this line int random_first = r.nextInt(99);) after outer for loop.


Bonus. For easier debugging, you can use a trick. Replace 99 with 10. Why? When you generate a list all values in it should be unique.

Random r = new Random();
int[] list = new int[10];

int bound = 10;
for (int number = 0; number < list.length; ++number) {
    list[number] = r.nextInt(bound);

    for (int uniqueNumber = 0; uniqueNumber < number; ++uniqueNumber) {
        if (list[uniqueNumber] == list[number]) {
            list[number] = r.nextInt(bound);
            uniqueNumber = -1;
        }
    }
}

1 Comment

The body of the if statement may be --number; break;.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.