Imprimir Nomes Aleatóriamente

15 respostas
H

Pessoal , alguem podeira me ajudar .

Exemplo tenho varias Strings como os nomes da semana e queria imprimir elas aleatóriamente.

15 Respostas

R

Coloque as Strings em uma matriz e utilize o método random para retornar um elemento aleatório da matriz:

Algo como:

public class RandomString {

	public static void main(String[] args)
	{
		String string1 = "domingo";
		String string2 = "segunda-feira";
		String string3 = "terça-feira";
		String string4 = "quarta-feira";
		String string5 = "quinta-feira";
		String string6 = "sexta-feira";
		String string7 = "sábado";
		
		String diasDaSemana[] = {string1, string2, string3, string4, string5, string6, string7 };
		
		String escolhido = diasDaSemana[(int) (Math.random() * diasDaSemana.length)];
		
		System.out.println(escolhido);
	}
}
H

Valeu thiago !
Eu fiz de outra maneira , mas vou usar assim tbm

B
Rizzo:
Coloque as Strings em uma matriz e utilize o método random para retornar um elemento aleatório da matriz:

Algo como:

public class RandomString {

	public static void main(String[] args)
	{
		String string1 = "domingo";
		String string2 = "segunda-feira";
		String string3 = "terça-feira";
		String string4 = "quarta-feira";
		String string5 = "quinta-feira";
		String string6 = "sexta-feira";
		String string7 = "sábado";
		
		String diasDaSemana[] = {string1, string2, string3, string4, string5, string6, string7 };
		
		String escolhido = diasDaSemana[(int) (Math.random() * diasDaSemana.length)];
		
		System.out.println(escolhido);
	}
}

neste caso como faço para não repetir o dia?

String escolhido = diasDaSemana[(int) (Math.random() * diasDaSemana.length) - escolhido];

???

B

Elimine o elemento escolhido do teu conjunto.

R
ArrayList<String> diasDaSemana = new ArrayList<String>(); 
		
		diasDaSemana.add("domingo");
		diasDaSemana.add("segunda-feira");
		diasDaSemana.add("terça-feira");
		diasDaSemana.add("quarta-feira");
		diasDaSemana.add("quinta-feira");
		diasDaSemana.add("sexta-feira");
		diasDaSemana.add("sábado");
		
		
		String escolhido = diasDaSemana.get((int) (Math.random() * diasDaSemana.size()));
		diasDaSemana.remove(escolhido);
B
Rizzo:
ArrayList<String> diasDaSemana = new ArrayList<String>(); 
		
		diasDaSemana.add("domingo");
		diasDaSemana.add("segunda-feira");
		diasDaSemana.add("terça-feira");
		diasDaSemana.add("quarta-feira");
		diasDaSemana.add("quinta-feira");
		diasDaSemana.add("sexta-feira");
		diasDaSemana.add("sábado");
		
		
		String escolhido = diasDaSemana.get((int) (Math.random() * diasDaSemana.size()));
		diasDaSemana.remove(escolhido);

Mas utilizando somente o vetor (sem ser ArrayList) , como seria?

B
Rizzo:
ArrayList<String> diasDaSemana = new ArrayList<String>(); 
		
		diasDaSemana.add("domingo");
		diasDaSemana.add("segunda-feira");
		diasDaSemana.add("terça-feira");
		diasDaSemana.add("quarta-feira");
		diasDaSemana.add("quinta-feira");
		diasDaSemana.add("sexta-feira");
		diasDaSemana.add("sábado");
		
		
		String escolhido = diasDaSemana.get((int) (Math.random() * diasDaSemana.size()));
		diasDaSemana.remove(escolhido);

ao tenta rodar , deu o seguinte problema:

run:
java.lang.IndexOutOfBoundsException: Index: 500, Size: 7
        at java.util.ArrayList.RangeCheck(ArrayList.java:547)
        at java.util.ArrayList.remove(ArrayList.java:387)
        at heranca2.Main.main(Main.java:60)
CONSTRUÍDO COM SUCESSO (tempo total: 1 segundo)

Quando informa "Indice fora do limite" em um arraylist significa o que?

doug

Olá
Esse erro acontece, qdo vc quer acessar um index que não existe no array.
Para solucionar isso basta substrair 1 do total

String escolhido = diasDaSemana.get((int) ((Math.random() * diasDaSemana.size()) - 1));

Acho que isso já soluciona seu erro.
Espero ter ajudado
Flwsss

B

thiago.filadelfo:
Olá
Esse erro acontece, qdo vc quer acessar um index que não existe no array.
Para solucionar isso basta substrair 1 do total

String escolhido = diasDaSemana.get((int) ((Math.random() * diasDaSemana.size()) - 1));

Acho que isso já soluciona seu erro.
Espero ter ajudado
Flwsss

Mas aí a gente chega em outro entrave: e se o resultado deste get for 0 (zero)?
Eu não consigo pegar a posição -1 de um vetor.

B

thiago.filadelfo:
Olá
Esse erro acontece, qdo vc quer acessar um index que não existe no array.
Para solucionar isso basta substrair 1 do total

String escolhido = diasDaSemana.get((int) ((Math.random() * diasDaSemana.size()) - 1));

Acho que isso já soluciona seu erro.
Espero ter ajudado
Flwsss

Thiago,
Mas aí a gente chega em outro problema: e se o resultado deste get for 0 (zero)?
Eu não consigo pegar a posição -1 de um vetor.

doug

Olá
Bem lembrado, precisa de ter um if antes testando…
Não raciocinei direito para responder fui escrevendo sem parar…

Obrigado pela observação

DavidUser

cara acho q deve criar o vetor com os valores e fazer um aleatório com o número do array e mostra o array com o número, para não repetir crie uma lista que receba os valoes ja listados e ponha para q se o valor ja existir na lista ele dar um loop.

Sacou? ele refaz o sorteio até que a lista de valores receba todos os vetores.

gpd38

Vc nao quer usar arraylist e quer remover o elemento que ja foi usado, mas so para tirar uma duvida.

Vc vai colocar o programa em um loop ?

Enquanto nao sair todos os nomes
escreve diadasemana

ou vc vai executar toda hora o programa

Roda uma vez
escreve um diadasemana
e fecha

Roda mais uma vez
escreve um diadasemana
e fecha

Se for a segunda opção nao tem geito de excluir nao

pmlm

Não vejo o porquê de ter dado esse erro. O random nunca deveria dar 500!

Este código funcionou correctamente no meu:

ArrayList<String> diasDaSemana = new ArrayList<String>();   
      
diasDaSemana.add("domingo");  
diasDaSemana.add("segunda-feira");  
diasDaSemana.add("terça-feira");  
diasDaSemana.add("quarta-feira");  
diasDaSemana.add("quinta-feira");  
diasDaSemana.add("sexta-feira");  
diasDaSemana.add("sábado");  
 
String escolhido;
for (int i = 0;  i<7; i++){    
    escolhido = diasDaSemana.get((int) (Math.random() * diasDaSemana.size()));  
    diasDaSemana.remove(escolhido);  
    System.out.println(escolhido);
}

Pegando no código inicial e usando array:

String string1 = "domingo";  
String string2 = "segunda-feira";  
String string3 = "terça-feira";  
String string4 = "quarta-feira";  
String string5 = "quinta-feira";  
String string6 = "sexta-feira";  
String string7 = "sábado";  
           
String diasDaSemana[] = {string1, string2, string3, string4, string5, string6, string7 };  
boolean disponivel[] = {true, true, true, true, true, true , true};  
         
int cont = 0;
int posicao;

while (cont < 7){
    posicao = (int) (Math.random() * diasDaSemana.length);  
    if (disponivel[posicao]){
        System.out.println(diasDaSemana[posicao]);
        disponivel[posicao] = false;
        cont++;  
    }
}
gpd38

A solução do “pmlm” está perfeita.

Otima jogada essa do true.

Criado 19 de abril de 2009
Ultima resposta 21 de abr. de 2009
Respostas 15
Participantes 8