Como retornar um elemento aleatorio de uma Array?

10 respostas
S

No caso abaixo eu fiz com elementos string

import java.util.Scanner;

class Retorno {
	public static void main(String[] args) {
	Scanner teclado = new Scanner(System.in);
	

	String[] objetos = new String[]{"bola","osso","graveto","disco"};
        int random = (int) Math.random(objetos) * 4; //retornar o elemento do array ?

	for(int x = 0; x < 11; x++) {
	
		System.out.print("Informe o objeto: ");
		String chute = teclado.nextLine();
		
		if(chute.equals(random)) {
                     System.out.println("Parabens vc acertou o objeto!");
                }
}
}

sei que a formataçao do codigo tem umas coisinhas erradas, mas é um esboço e ja da pra entender o que eu quero

alguem poderia me ajudar

abs

10 Respostas

A

Você acessa elementos num array através de um índice.

No seu caso, você precisa escolher um indíce de forma aleatório.

Ou seja, aquela variavel random, representaria seu índice.

int indiceSorteado = ... // sorteia um índice do array, random entre 0 e tamanho do array
  String objetoSorteado = objetos[indiceSorteado];
S

opa entendi, mas tem um problema agora, pq toda vez que eu escrevo bola ele acerta, acho que ele nao esta percorrendo os demais

import java.util.Scanner;

class MasterMind {
	public static void main(String[] args) {
	Scanner teclado = new Scanner(System.in);
 
	for(int x = 0; x < 11; x++) {
            String[] cor = new String[]{"bola","osso","graveto","disco"};
            int random = (int) Math.random() * 4;  
            String indice = cor[random];
        
		System.out.print("Informe o objeto: ");
		String chute = teclado.nextLine();
		
		if(chute.equals(indice)) {
                   System.out.println("Voce acertou!!!");
                } else {
                   System.out.println("Voce errou");
                }

         }
        }
}

como proceder?

S

aproveitando o espaço, caso o cara acerte o objeto, como eu faço pra excluir o elemento que ele acertou da array ?

Abs

edit: vou mudar o elemento do array para null vamos ver se funfa

L

Desculpe não li muito bem, porem pelo titulo do post e somente por isso eu faria isso…

private SeuArray getAleatorio(List<SeuArray> lista){
	Random random = new Random();
	return lista.get(random.nextInt(lista.size));
}

desculpe tiver algum errinho não testei mais ta ai a ideia saca…

L

para remover use o metodo equal para achar o indice e depois delete, claro que tem varias maneiras de fazer isto… uma bem simples é assim.

List<String> list = new ArrayList<String>();
		list.add("a");
		list.remove(0);
S

luivilella:
Desculpe não li muito bem, porem pelo titulo do post e somente por isso eu faria isso…

private SeuArray getAleatorio(List<SeuArray> lista){
	Random random = new Random();
	return lista.get(random.nextInt(lista.size));
}

desculpe tiver algum errinho não testei mais ta ai a ideia saca…

to tentando fazer sem usar get() set(), e sem OO, estou meio limitado em usar as classes, pois nao cheguei nessa parte do curso ainda, apesar de ja saber manipular um pouco

o jeito do segundo cara que respondeu funcionou, mas toda vez que chuto “bola” ele acerta
como se o Math.random nao estivesse retornando os outros objetos da array

S
luivilella:
para remover use o metodo equal para achar o indice e depois delete, claro que tem varias maneiras de fazer isto.. uma bem simples é assim.
List<String> list = new ArrayList<String>();
		list.add("a");
		list.remove(0);

joia

L

Amigo ta ae… espero que ajude nos seus estudos…

package teste;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class Teste {

	public static void main(String[] args) {
		List<String> objetos = new ArrayList<String>();
		objetos.add("bola");
		objetos.add("osso");
		objetos.add("graveto");
		objetos.add("disco");
		System.out.println("Tamanho inicial lista: " + objetos.size());

		Random random = new Random();
		String sorteada = objetos.get(random.nextInt(objetos.size()));

		String usuarioDigitou = "disco";

		if (sorteada.equals(usuarioDigitou)) {
			System.out.println("ACERTOU");
			for (int i = 0; i < objetos.size(); i++) {
				if (objetos.get(i).equals(sorteada)) {
					objetos.remove(i);
					break;
				}
			}
		}

		System.out.println("Tamanho final lista: " + objetos.size());
	}
}
S
luivilella:
Amigo ta ae.. espero que ajude nos seus estudos..
package teste;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class Teste {

	public static void main(String[] args) {
		List<String> objetos = new ArrayList<String>();
		objetos.add("bola");
		objetos.add("osso");
		objetos.add("graveto");
		objetos.add("disco");
		System.out.println("Tamanho inicial lista: " + objetos.size());

		Random random = new Random();
		String sorteada = objetos.get(random.nextInt(objetos.size()));

		String usuarioDigitou = "disco";

		if (sorteada.equals(usuarioDigitou)) {
			System.out.println("ACERTOU");
			for (int i = 0; i < objetos.size(); i++) {
				if (objetos.get(i).equals(sorteada)) {
					objetos.remove(i);
					break;
				}
			}
		}

		System.out.println("Tamanho final lista: " + objetos.size());
	}
}

no futuro sim hehe
mas estou tentando fazer sem usar arraylist, get(), set(), OO
nao estou nessa parte ainda, e o professor da facul pediu como requisitos que agente se virasse com programaçao procedural mesmo
só usei scanner pois é fundamental

abs

L

ai ideia é a mesma é troque o list para para o que vc precisa nao use get e talz pegue este e mude…

Criado 3 de julho de 2011
Ultima resposta 3 de jul. de 2011
Respostas 10
Participantes 3