Erro ArrayIndexOutOfBoundsException (Collections)

6 respostas
peresjuliao

Olá Javanese?!

O código abaixo:

class Song implements Comparable<Song>
{
	String title;
	String artist;
	String rating;
	String bpm;
	
	public int compareTo(Song s)
	{
		return title.compareTo(s.getTitle());
	}
	
	Song(String t, String a, String r, String b)
	{
		title = t;
		artist = a;
		rating = r;
		bpm = b;
	}
	
	public String getTitle()
	{ 
		return title;
	}
	
	public String getArtist()
	{
		return artist;
	}
	
	public String getRating()
	{
		return rating;
	}
	
	public String getBpm()
	{
		return bpm;
	}
	
	public String toString()
	{
		return title;
	}
}

e…

import java.util.*;
import java.io.*;

public class JukeBox3
{
	ArrayList<Song> songList = new ArrayList<Song>();
	public static void main(String [] args)
	{
		new JukeBox3().go();
	}
	
	public void go()
   {
      getSongs();
      System.out.println(songList);
      Collections.sort(songList);
      System.out.println(songList);
   }

   void getSongs()
   {
      try
      {
         File file = new File("SongListMore.txt");
         BufferedReader reader = new BufferedReader(new FileReader(file));
         String line = null;
         while((line = reader.readLine()) != null)
         {
            addSong(line);
         }
      }
      catch(Exception ex)
      {
         ex.printStackTrace();
      }
   }

   void addSong(String lineToParse)
   {
      String[] tokens = lineToParse.split("/");
      Song nextSong = new Song(tokens[0], tokens[1], tokens[2], tokens[3]);
      songList.add(nextSong);
   }
}

Da o seguinte erro:

java.lang.ArrayIndexOutOfBoundsException: 2

at JukeBox3.addSong(JukeBox3.java:41)

at JukeBox3.getSongs(JukeBox3.java:29)

at JukeBox3.go(JukeBox3.java:14)

at JukeBox3.main(JukeBox3.java:9)

[]

[]

Agora o contéudo do arquivo SongListMore.txt:

Pink Moon/Nick Drake
Somersault/Zero 7
Shiva Moon/Prem Joshua
Circles/BT
Deep Channel/Afro Celts
Passenger/Headmix
Listen/Tahit 80

Ou seja quero que mostra do jeito que esta e depois coloca em ordem alfabética.
Alguém pode me explicar o por que deste erro?

6 Respostas

marcosharbs
Song nextSong = new Song(tokens[0], tokens[1], tokens[2], tokens[3]);

provavelmente o indice 2 não existe no seu array (tokens[2]).

T
String[] tokens = lineToParse.split("/");  
       Song nextSong = new Song(tokens[0], tokens[1], tokens[2], tokens[3]);

Mas sua linha só tem um “/”. Para o seu código funcionar, cada linha teria de ter pelo menos 3 “/”.

W

Olá, provavelmente vc está estudando o livro “Use a Cabeça! Java”

Complementando o que o thingol disse:
Quando for fazer o split, o array de Strings terá apenas 2 tokens, segundo seu arquivo SongListMore.txt. E quando tenta acessar tokens[2], o índice 2 está tentando acessar a terceira posição do array que não existe.
Aliás, se vc realmente estiver fazendo esse exercício do livro “Use a Cabeça! Java”, o conteúdo de SongListMore.txt não é esse, o que vc pôs no tópico é o do SongList, o conteúdo do SongListMore.txt está na página 374.
De qualquer maneira, para esse código funcionar, cada linha do arquivo deve estar assim:
Pink Moon/Nick Drake/5/80
Pink Moon = token[0]
Nick Drake = token[1]
5 = token[2]
80 = token[3]

Espero ter ajudado, abs.

peresjuliao

Olá, Winthorp

Respondendo a sua pergunta é sim eu estou lendo o Use a Cabeça Java, Primeiro eu fiz uma leitura do livro sem fazer os exercícios e digitar os códigos, agora estou lendo novamente o livro a apenas digitando os códigos e compilando e rodando todos para um melhor entendimento, depois vou voltar a leitura e fazer os exercícios.

Admito, estou com dificuldade, mas o livro é bom e tenho o GUJ.
Sou iniciante e estou aprendendo a linguagem agora , gostaria de saber o que tenho que fazer mais para reforçar os meus estudos em Java, principalmente em Collections?

Abraços

W

Olá peresjuliao, sugiro que vc leia desde o começo o livro e faça os exercícios conforme vão aparecendo, dessa forma, vc vai avançando de nível e não comete enganos como ocorreu com a SongListMore.
Dê uma olhada no site da caelum e baixe a apostila fj11 que é legal tb.
Sobre collections, no livro tem um capítulo que aborda o assunto, mas como eu disse, estude os capítulos na ordem pra não “atropelar” nenhum assunto.
abs.

peresjuliao

Obridago Winthorp

Criado 15 de janeiro de 2009
Ultima resposta 16 de jan. de 2009
Respostas 6
Participantes 4