Como adicionar informções de ao arraylist pelo scanner

5 respostas
arraylist
V

Boa noite pessoal.

Estou desenvolvendo um programinha de sorteio de nomes. Porém estou com dificuldade de inserir informações no array list pelo Scanner.

Alguém pode me ajudar? Segue o código.

package exercicios;

import java.util.ArrayList;

import java.util.Collections;

import java.util.List;

import java.util.Scanner;

public class SorteiaNomesPrimerioGP2 {

public static void main(String[] args) {

	String nomes;
	Scanner scanner = new Scanner(System.in);
	System.out.println("Digite os nomes dos jogadores");

	nomes = scanner.next();

	
	List<String> nomes1 = new ArrayList<>();
	nomes1.add(nomes);

	System.out.print("            TIME 1 \n ");
	System.out.println("______________________________ \n");

	
	Collections.shuffle(nomes1);


	for (int i = 0; i < 5; i++) {
		int escolha = (int) Math.random() * nomes1.size();
		System.out.println("*" + nomes1.get(escolha));
		nomes1.remove(escolha);

	}

	System.out.print("            TIME 2 \n ");
	System.out.println("______________________________ \n");

	Collections.shuffle(nomes1);


	for (int i = 0; i < 5; i++) {
		int escolha = (int) Math.random() * nomes1.size();
		System.out.println("*" + nomes1.get(escolha));
		nomes1.remove(escolha);

	}
}

}

Eu consigo adicionar o primeiro nome, porém quando eu aperto o enter ele me retorna o nome mas da erro. Eu queria n nomes.

5 Respostas

R

A inserção na lista está correta.
Se quer vários nomes, o problema é sua lógica que só lê um nome. Pq n tenta usar um FOR pra ler e inserir vários?

L

Coloca a stack trace aqui pra gente ver.

G

Fala Victor, blz?

Acabei realizando algumas alterações no código e coloquei alguns comentários.

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;

public class SorteiaNomesPrimeiroGP2 {

	public static void main(String[] args) {
		
		String nomes;
		String[] nomesDelimitados;//utilizada para armanezar nomes recebidos pelo método split
		Scanner scanner = new Scanner(System.in);
		
		//Recebe os nomes delimitados
		System.out.println("Digite os nomes dos jogadores delimitados por ',':");
		nomes = scanner.next();
		//Inicializa um array de strings com o valor da variável nomes 
		nomesDelimitados=nomes.split(",");
		
		ArrayList<String> nomesArrayList = new ArrayList<>();
		
		//Adiciona nomesDelimatados no ArrayList
		for (int i = 0; i < nomesDelimitados.length; i++) {
			String nome=nomesDelimitados[i];
			nomesArrayList.add(nome);
		}
		
		
		System.out.println(nomesArrayList.size());
		

		System.out.print("            TIME 1 \n ");
		System.out.println("______________________________ \n");
		
		Collections.shuffle(nomesArrayList);
		
		//Realiza um laço até o tamanho do ArrayList
		//No código anterior o laço sempre acessava uma posição inexistente no ArrayList 
		for (int i = 0; i <nomesArrayList.size(); i++) {
			//Realiza o cast do resultado da expressão( Math.random() * nomesArrayList.size()
			//No código anterior, o cast era feito apenas em Math.random()
			int escolha = (int)( Math.random() * nomesArrayList.size());
			System.out.println("*" + nomesArrayList.get(escolha));
			nomesArrayList.remove(escolha);

		}

		System.out.print("            TIME 2 \n ");
		System.out.println("______________________________ \n");

		Collections.shuffle(nomesArrayList);

		//Realiza um laço até o tamanho do ArrayList
		for (int i = 0; i < nomesArrayList.size(); i++) {
			int escolha = (int) Math.random() * nomesArrayList.size();
			System.out.println("*" + nomesArrayList.get(escolha));
			nomesArrayList.remove(escolha);
		}
	}


}

Espero ter ajudado. :grinning:

V

Consegui com while, mas não ficou exatamente o que eu queria. Mas por enquanto está me ajudando.

Obrigado

V

Cara, seu código me ajudou muito. O achei um problema na hora de executar. Quando ele faz o sorteio o segundo grupo não ssai com a quantidade de nomes solicitados. Consegui fazer aqui o sorteio com a quantidade solicitada.

package sorteio;

import java.util.ArrayList;

import java.util.Collections;

import java.util.List;

import java.util.Scanner;

public class SorteiaTimeInserçãoInterna {

public static void main(String[] args) {

	
	String nomes;
	
	String[] nomesDelimitados;
					
	Scanner scanner = new Scanner(System.in);
	
	System.out.println("Digite os nomes dos jogadores:");
	
	nomes = scanner.next();
				
	nomesDelimitados = nomes.split(",");

	List<String> nomes1 = new ArrayList<>();
	
	for (int i = 0; i < nomesDelimitados.length ; i++) {
		String nome = nomesDelimitados[i];
		nomes1.add(nome);
	}
//		System.out.println(nomes1);

System.out.print("            TIME 1 \n “);

System.out.println(”______________________________ \n");
// SORTEIA A LISTA DO TIME 1
	Collections.shuffle(nomes1);

	// ELIMINA AS REPETIÇÕES
	for (int i = 0; i < 5; i++) {
		int escolha = (int) Math.random() * nomes1.size();
		System.out.println("*" + nomes1.get(escolha));
		nomes1.remove(escolha);

	}

	System.out.print("            TIME 2 \n ");
	System.out.println("______________________________ \n");

	Collections.shuffle(nomes1);

	// ELIMINA AS REPETIÇÕES
	for (int i = 0; i < 5; i++) {
		int escolha = (int) Math.random() * nomes1.size();
		System.out.println("*" + nomes1.get(escolha));
		nomes1.remove(escolha);
		

	}
}

Agora o próximo passo é fazer com que o usuário escolha a quantidade de jogares pra cada time. ainda chego la.

Obrigado, abraço.

Criado 16 de agosto de 2018
Ultima resposta 17 de ago. de 2018
Respostas 5
Participantes 4