Numeros randomicos sem repeticao

Olá, estou tentando fazer um exercicio que envolve números randomicos com o seguinte código:

```
    int sorteio1 = (int)(Math.random() * 6) +1;
    int sorteio2 = (int)(Math.random() * 6) +1;
    int sorteio3 = (int)(Math.random() * 6) +1;
    int sorteio_usuario = (int)(Math.random() * 6) +1;
    ```

Porém estou encontrando a seguinte dificuldade: as variáveis sorteio1, sorteio2, sorteio3, não podem ter o mesmo valor… Existe alguma maneira para efetuar isso?

Pensei até em fazer intervalos, por exemplo, o sorteio1 vai de 1 ate 2, o sorteio2 vai de 3 até 4 e o sorteio3 vai de 5 ate 6. Porém não encontrei formas de aplicar esse sorteio por intervalo no código acima. Talvez usando um for para cada variavel sorteio funcionaria, porém sinto que talvez fosse uma gambiarra…

Existe alguma maneira de fazer isso SEM usar array, vector, list etc?

Sem usar array é mais “chato” (já que o mais simples seria colocar todos os valores possíveis em um array, embaralhá-lo e escolher os 3 primeiros - método também conhecido como Algoritmo Fisher-Yates).

Mas como não quer usar array (por que não? é a solução mais simples) o jeito é usar a “força bruta”:

Random rand = new Random();

int sorteio1 = rand.nextInt(6) + 1;

int sorteio2;
do { // enquanto sorteio2 for o mesmo número que sorteio1, continua sorteando
    sorteio2 = rand.nextInt(6) + 1;
} while (sorteio2 == sorteio1);

int sorteio3;
do { // enquanto sorteio3 for o mesmo número que sorteio1 ou sorteio2, continua sorteando
    sorteio3 = rand.nextInt(6) + 1;
} while (sorteio3 == sorteio1 || sorteio3 == sorteio2);

Repare que também mudei a forma de sortear o número, usando a classe java.util.Random. Ao fazer nextInt(6), eu tenho um número entre 0 e 5. Somando 1, o resultado é um número entre 1 e 6 (que parece ser o que você queria).

Lembrando que dependendo da quantidade de sorteios e do intervalo de números usado, esse código pode acabar demorando bastante, pois pode ser que o loop tenha que sortear muitas vezes até encontrar um número que não seja repetido.

Olá @hugokotsubo! Primeiramente muito obrigado por responder!

Infelizmente não posso usar array no momento pois ainda não foi formalizado no curso que estou fazendo…

Mas muito obrigado pela lógica que demonstrou no código, realmente compreendi! Porém agora está dando um erro, deve ser coisa boba, mas não identifiquei: Seria indentação?

O código tem que estar dentro de algum método…

Meu Deus! Desculpe pela burrice… Que vergonha. Desculpe e mais uma vez muito obrigado, você me ajudou muito!

Você poderia ser nomeado facilmente como Deus do Java ou nomes similares :laughing: porque manda bem demais!

Valeu!