Duvida em Random com string

galera porq quando crio um Random com 4 strings ou mais da certo conforme abaixo…

public class Treino {
public static void main(String[] args) {
		
		Cartas c = new Cartas();
		c.sorteioC();
		String nome;
		String[] nomes = {"Fogo", "Água","Pedra", "Raio", "Natureza"};
		nome = nomes[(int)(Math.random()*nomes.length)];
		System.out.println(nome);

mas quando eu uso apenas 2 variáveis o random so aponta para primeira …

String[] nomes = {“Lutador”, “Guerreiro”};
nome = nomes[(int)(Math.random()*nomes.length)];

		System.out.println(nome);

O que você quer dizer com “só aponta pra primeira”? Está saindo mais “Lutador” (posição 0) ou “Guerreiro” (posição 1)?

De qualquer forma, sua multiplicação Math.random()*nomes.length está aumentando as chances de sair um número maior que 1, o que provavelmente faz o cast para int retornar 1. É esse seu problema?

Usando só Math.random(), obtive um resultado razoavelmente dividido : https://ideone.com/FvPLli

De qualquer forma, se você precisa de um número inteiro entre 0 e o tamanho do vetor, é mais simples usar a classe random e o método nextInt, que já retorna o número inteiro na faixa desejada.

Abraço.

1 curtida

so sai lutador! para ter certeza fiz um while(nome.equals(“lutador”))… ai deu lupinhg infinito

Se o que está no vetor é Lutador (com L maiúsculo) e você está comparando com lutador (l minúsculo), vai dar loop infinito mesmo, pois o equals considera essa diferença. Você precisa usar equalsIgnoreCase ou comparar com Lutador com L maiúsculo. Veja o link do ideone que coloquei.

Abraço.

1 curtida

sei q podia usar da outra forma como no link (e vou usar ela mesmo), só queria entender por q no q fiz não deu certo mesmo com letras iguais ou usando equalsIgnoreCase.

Mostra lá esse while