Ajuda - Split!

11 respostas
ThaisBardini
Olá tenho que pegar números que entram em uma linha de Strings, e passar para um array de int, mas não sei como usar o split (separando por espaço). fiz o seguinte código:
String pontos;
		int[] numeros = new int[11];
		
		System.out.println("Digite as pontuações separadas por espaços: ");
		pontos = leitor.next();
		
		String nums[] = pontos.split(".\s*");

digitei os números separados por espaço e resultou nesse erro?

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
at Interface.pegueJogador(Interface.java:57)
at Principal.main(Principal.java:6)

vocês podem me ajudar? o que tá acontecendo?
Obrigada!

11 Respostas

doug

Olá

Tenta fazer assim, acho que isso já funciona para você

String nums[] = pontos.split(" ");

Espero ter ajudado
FLwss

ThaisBardini

Thiago,
não deu certo! :frowning:
continua dando o mesmo erro…
já tentei de várias formas, colocando aspas aqui, barras ali, s*, e nada…

Socorroooo!

doug

Tem algum lugar mais que vc trabalha com esse array?
Porque a mensagem que está informando é que nao pode acessar um lugar no array

Pelo jeito nao é seu split

É na linha 57 da Classe Interface, método: pegueJogador

Por favor cole esse código para analisarmos melhor

Espero ajudar
Flwsss

lina

Oi,

Muito estranho.. a solução do thiago.filadelfo está correta para esta situação...

Olha.:

String
texto = "OLA MUNDO EBAAA";
		
String[]
split = texto.split(" ");
		
for (int i=0; i<split.length; i++)
System.out.println(split[i]);

Saida.:

OLA
MUNDO
EBAAA

A exceção ArrayIndexOut....Bounds significa que você está pegando uma poisição de uma array que não existe! (fora do range)

Qual exatamente o texto que você está escrevendo para dar o split ?

Tchauzin!

ThaisBardini
import java.util.Scanner;
public class Interface{
	
	public static int numJogadores(){
		
		Scanner leitor = new Scanner(System.in);
		int numJogadores;
		
		System.out.println("Oi, Carla! :)");
		System.out.println("Digite o número de participantes: ");
		
		numJogadores = leitor.nextInt();
		
		return numJogadores;
	}
	
	public static Jogador pegueJogador(){
			Scanner leitor = new Scanner(System.in);
		String nome;
		int tam = 16;
		String nomee="";
		char first;
		
		while (tam>15){
			System.out.println("Digite o nome do jogador: ");
			nome = leitor.next();
			nome = nome.toLowerCase();
			for(int i=1; i<nome.length(); i++)
				nomee+=nome.charAt(i);
			first = Character.toUpperCase(nome.charAt(0));
			nomee=first+nomee;
			tam = nome.length();
			
			if(tam>15)
				System.out.println("Dado incorreto, digite um nome de até 15 letras.");
		}
		
		String pontos;
		int[] numeros = new int[12];
		
		System.out.println("Digite as pontuações separadas por espaços: ");
		pontos = leitor.next();
		
		String nums[] = pontos.split(" ");
		
		for(int i = 0; i<12; i++)
			numeros[i] = Integer.parseInt(nums[i]);
		Jogador jogador=new Jogador(nomee, numeros);
		return jogador;
	}
	
}

a classe Interface teria que pegar um jogador com o nome apenas com a 1ª letra maiúscula (mas isso ainda não testamos se deu certo)e um array com sua pontuação em um jogo, mas os números entram em uma unica linha (String) separados por espaço.
não sabemos usar o split(mas já tentemos de todas as formas possíveis e imagináveis), não sabemos se o erro está nele, já resolvi o problema do tamanho do array, colocamos [12] no lugar do [11]..não usamos esse array ainda em nenhum outro lugar..
esse é o erro
Digite o número de participantes:
1
Digite o nome do jogador:
maria
Digite as pontuações separadas por espaços:
1 2 3 4 5 6 7 8 9 1 2 3
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
at Interface.pegueJogador(Interface.java:57)
at Principal.main(Principal.java:6)

Obrigada ;D

doug

Olá

O erro esta ocorrendo nesta linha aqui:

for(int i = 0; i<12; i++)
numeros[i] = Integer.parseInt(nums[i]);

Observe, numeros tem o tamanho de 12 e qual o tamanho de nums… provavelmente nao seja 12 também
Nao sei se vc entendeu, faz o seguinte:

int numeros[] = new int [nums.length];
for(int i=0; i<nums.length; i++){
   numeros[i] = Integer.parseInt(nums[i]);
}

Isso evita de você ter esses problemas de tamanhos de arrays

Espero ter ajudado
Flwsss>

lina

Oi,

Primeiro problema na sua codificação.. Looping forever.:

while (tam>15){
			System.out.println("Digite o nome do jogador: ");
			nome = leitor.next();
			nome = nome.toLowerCase();
			for(int i=1; i<nome.length(); i++)
				nomee+=nome.charAt(i);
			first = Character.toUpperCase(nome.charAt(0));
			nomee=first+nomee;
			tam = nome.length();
			
			if(tam>15)
				System.out.println("Dado incorreto, digite um nome de até 15 letras.");
		}

Se o jogador tem um nome gigante?

tam = nome.length();

Ele nunca sairá do While!

O problema da sua dúvida está no código.:

for(int i = 0; i<12; i++)
numeros[i] = Integer.parseInt(nums[i]);

A variavel nums pode não ter 12 posições, ou seja, poderá ter apenas 4.

Você deverá fazer.:

for(int i = 0; i<nums.length; i++)
numeros[i] = Integer.parseInt(nums[i]);

Tchauzin!

ThaisBardini

pois entãão.. fiz exatamente isso (apesar de ter digitado antes 12 números, exatamente..) e deu o mesmo erro
Fiz agora um System.out.printl pra mostra direto a String que tava pegando da primeira vez.. e deu erro nela! o.O
Não mostrou

System.out.println("Digite as pontuações separadas por espaços: ");
		pontos = leitor.next();
		System.out.println(pontos);
		String nums[] = pontos.split(" ");
		for(int k=0; k<nums.length; k++)
			System.out.println(nums[k]);
		
		int numeros[] = new int [nums.length];  
   		for(int i=0; i<nums.length; i++){  
   			numeros[i] = Integer.parseInt(nums[i]);  
  		 }

é algum erro besta que eu não tô conseguindo ver!! :O

lina

Oi,

Olha… parece que agora ficou certo! o que pode gerar exceção é o código.:

numeros[i] = Integer.parseInt(nums[i]);

Se algum caracter dentro de nums[i] for diferente de numerico! (+ isso é um pouco improvavel…)

Tchauzin!

ThaisBardini

o problema tá no leitor.next(), só tá pegando o 1º pq é por String… e eu quero a linha todaaa
como é o comando p pegar a linha toda? (tentei nextLine() e não deu)

lina

Oi,

Olha! nunca usei a classe Scanner em toda minha vida de JAVA.
Provavelmente ele deve ter o método hasNext().

Você deverá ficar nele (while) até acabar a montagem de sua String.

Tchauzin!

Criado 23 de agosto de 2009
Ultima resposta 23 de ago. de 2009
Respostas 11
Participantes 3