Como adicionar informções de ao arraylist pelo scanner

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.

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?

1 curtida

Coloca a stack trace aqui pra gente ver.

1 curtida

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:

1 curtida

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

Obrigado

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.