0

Hello I'm trying to make 21 numbers. they all need to be a number between 0 - 21.

Sound easy.. but

They need to be in a random order and non off them can be equal

I have tried many things but, some of them always will be equal

Please help! :)

public void getIngrediet(){

    board[1][5] += getRandomIngredient();
    board[1][4] += getRandomIngredient();
    board[1][3] += getRandomIngredient();
    board[1][2] += getRandomIngredient();
    board[1][1] += getRandomIngredient();

    board[2][5] += getRandomIngredient();

    board[2][3] += getRandomIngredient();

    board[2][1] += getRandomIngredient();

    board[3][5] += getRandomIngredient();
    board[3][4] += getRandomIngredient();
    board[3][3] += getRandomIngredient();
    board[3][2] += getRandomIngredient();
    board[3][1] += getRandomIngredient();

    board[4][5] += getRandomIngredient();

    board[4][3] += getRandomIngredient();

    board[4][1] += getRandomIngredient();

    board[5][5] += getRandomIngredient();
    board[5][4] += getRandomIngredient();
    board[5][3] += getRandomIngredient();
    board[5][2] += getRandomIngredient();
    board[5][1] += getRandomIngredient();
}

public String getRandomIngredient(){
    r = new Random();

    int i1 = r.nextInt(21);
    String randomID = String.valueOf(i1);

    boolean b[] = new boolean[21];

    if(b[0] == false){b[0] = true; return randomID;}
    if(b[1] == false){b[1] = true; return randomID;}
    if(b[2] == false){b[2] = true; return randomID;}
    if(b[3] == false){b[3] = true; return randomID;}
    if(b[4] == false){b[4] = true; return randomID;}
    if(b[5] == false){b[5] = true; return randomID;}
    if(b[6] == false){b[6] = true; return randomID;}
    if(b[7] == false){b[7] = true; return randomID;}
    if(b[8] == false){b[8] = true; return randomID;}
    if(b[9] == false){b[9] = true; return randomID;}
    if(b[10] == false){b[10] = true; return randomID;}
    if(b[11] == false){b[11] = true; return randomID;}
    if(b[12] == false){b[12] = true; return randomID;}
    if(b[13] == false){b[13] = true; return randomID;}
    if(b[14] == false){b[14] = true; return randomID;}
    if(b[15] == false){b[15] = true; return randomID;}
    if(b[16] == false){b[16] = true; return randomID;}
    if(b[17] == false){b[17] = true; return randomID;}
    if(b[18] == false){b[18] = true; return randomID;}
    if(b[19] == false){b[19] = true; return randomID;}
    if(b[20] == false){b[20] = true; return randomID;}

    //Else ill get a error
    return "99";
}
Paul Abbott
  • 7,065
  • 3
  • 27
  • 45
Oliver
  • 7
  • 7
  • 2
    Put the numbers 1-21 in an array then shuffle it. http://stackoverflow.com/questions/1519736/random-shuffling-of-an-array – Ted Bigham Jul 30 '14 at 23:52

3 Answers3

0

Save every random number you retreive into an array, then for each new random number, check against the array, if there is a match, get another random number untill it is unique

0

Save every random number you generate into a Set. The Set property will not allow duplicates to be added, so you're guaranteed to have no repeating values. If you use a LinkedHashSet, you will also be guaranteed insertion order (that is, the order in which the numbers are randomly appearing is the same order you'll get coming out of the set).

You would also want to stop accepting values after you get your 20 or so values.

I'm going to assume [0, 21) for your range, and basically give you a rough feel of how the code would look:

public Set<Integer> generateUniqueRandomNumbers(int maxValue) {
    final Set<Integer> uniqueRandomNumbers = new LinkedHashSet<>();
    final Random random = new Random();
    while(uniqueRandomNumbers.size() < maxValue) {
        uniqueRandomNumbers.add(random.nextInt(maxValue));
    }
    return uniqueRandomNumbers;
}
Makoto
  • 104,088
  • 27
  • 192
  • 230
0

Just make a list with 0-21 and shuffle them.

List<Integer> list = new ArrayList<>(21);
for (int i = 0; i < 21; i++)
    list.add(i);
Collections.shuffle(list);
System.out.println(list);
johnchen902
  • 9,531
  • 1
  • 27
  • 69