Uso de Random pra gerar um só numero 0, 1 e 2

/*
	no caso é um jogo de Jokenpo, e eu gostaria que a maquina gerasse somente um numero diferente
	(0,1 e 2) para o jogo.
*/
package jockenpo;

import java.util.Random;

public class Jogojokenpo {
	
	public int maqui;
	public int escolha;
	public String v1;
	public String v2;
	
	public Jogojokenpo() {
		Random gerador = new Random(10);
		maqui = gerador.nextInt(2) + 1;
	}
	
	public int play(int escolha, int random) {
		return 0;
	}
	
	public String seila() {
		if (escolha == 1) {
			v1 = "Papel";
		}
		
		if (escolha == 2) {
			v1 = "Pedra";
		}
		
		if (escolha == 3) {
			v1 = "Tesoura";
		}
		
		return v1 + "";
	}
	
	public String seila1() {
		if (maqui == 0) {
			v2 = "Papel";
		}
		
		if (maqui == 1) {
			v2 = "Pedra";
		}
		
		if (maqui == 2) {
			v2 = "Tesoura";
		}
		
		return v2 + "";
	}
}

Mas só me sai o 1

O random pode ser assim:

private int random() {
	int min = 0, max = 2;
	Random random = new Random();
	return (random.nextInt(max - (min - 1)) + min);
}
1 curtida

Opa Lucas obrigado, como é POO, seria necessário um getter para usar o random num main class certo?

Por que não nextInt(3);?
Retornaria de 0 a 2

O problema está aqui. Você sabe o que é esse 10 que você passou para o construtor? É o chamado seed - veja a documentação.

Basicamente, um Random é um gerador de números pseudo aleatórios: ele parte de um valor inicial (chamado de seed) e vai fazendo várias contas para gerar os próximos. Se você começa sempre pelo mesmo seed, sempre terá a mesma sequência de números.

Sendo assim, faça apenas new Random(), que internamente ele escolhe um seed diferente a cada execução.

E para obter um número entre 0 e 2, use nextInt(3), como já disseram.

1 curtida

Isso nunca vai gerar 0.

Modifique para:

gerador.nextInt(3);