Lista sequencial x Arquivo texto

Em primeiro lugar, olá, sou novo no GUJ e ouvi falar tão bem de vocês que resolvi me cadastrar e espero poder entrar para a família :smiley: hehe
Pessoal, seguinte, to com um trabalho da faculdade imenso e estou com alguns problemas. Assim, tenho que ler um arquivo texto com informações de filmes de uma locadora.
No total são 438 filmes (linhas) com o seguinte formato:

[quote]Drama; 2000; Tabu (Gohatto) ;37
Comédia; 2001; Tá Todo Mundo Louco! - Uma Corrida por Milhõe$ (Rat Race) ;146
Animação; 2007; Tá Dando Onda (Surf’s Up) ;252[/quote]

A primeira coluna é referente à Gênero, a segunda, ano, terceira nome, quarta - (nome estrangeiro), e a ultima o total de locações.
Então, a primeira questão é ler o arquivo texto, o que já fiz no código.
Após ler este arquivo, preciso inserir os filmes em uma lista sequencial (o que tentei fazer também no código).
Agora, preciso criar uma nova lista com 50 posições, referente ao ranking dos 50 filmes mais locados. Aí que eu não sei mais o que fazer.

Precisava que vocês me ajudassem, corrigindo os possíveis erros do meu código e me auxiliando na criação desta outra lista com o ranking.

Código da Lista Sequencial:

[code]package ListaSequencial;

public class SequentialListComExcecaoObject {

private Object list[];
private int last = -1;

public SequentialListComExcecaoObject(int size) {
	list = new Object[size];
}

public boolean isEmpty() {
	if (last == -1)
		return true;
	else
		return false;
}

public boolean isFull() {
	if (last == list.length - 1)
		return true;
	else
		return false;
}

public int getSize() {
	return last + 1;
}

public Object get(int index) throws UnderflowException,
		ArrayIndexOutOfBoundsException {
	//System.out.println("index: "+index+" last: "+last);
            if (isEmpty())
		throw new UnderflowException();
	else if (index < 0 || index > last){
                    System.out.println("index: "+index+" last: "+last);
		throw new ArrayIndexOutOfBoundsException();
            }
	else
		return list[index];
}

public void insert(Object element) throws OverflowException {
	if (isFull())
		throw new OverflowException();
	last++;
	list[last] = element;
}

public void insert(Object element, int index) throws OverflowException,
		ArrayIndexOutOfBoundsException {
	if (isFull())
		throw new OverflowException();
	else if (index < 0 || index > last + 1)
		throw new ArrayIndexOutOfBoundsException();
	for (int i = last + 1; i > index; i--) {
		list[i] = list[i - 1];
	}
	last++;
	list[index] = element;
}

public Object remove(int index) throws UnderflowException,
		ArrayIndexOutOfBoundsException {
	if (isEmpty())
		throw new UnderflowException();
	else if (index < 0 || index > last)
		throw new ArrayIndexOutOfBoundsException();
	Object el = list[index];
	int numberofElements = last - index;
	if (numberofElements > 0) {
		System.arraycopy(list, index + 1, list, index, numberofElements);
	}
	last--;
	return el;
}

public void print() {
	System.out.println("Impressao lista");
	for (int i = 0; i <= last; i++)
		System.out.println(list[i]);
}

}[/code]

Código do trabalho:

[code]package trabalhograua;

import ListaSequencial.;
import java.io.
;

class Main {
public static void main (String args []) throws OverflowException, UnderflowException{
SequentialListComExcecaoObject s = Metodos.leArquivo();
for(int i=0; i<s.getSize(); i++){
Filmes f = (Filmes) s.get(i);
System.out.println("####### Filme “+(i+1)+” ######");
f.montaFilme();
System.out.println();
}
s.print();
//Top50.melhores();
}
}

class Metodos {
public static SequentialListComExcecaoObject leArquivo(){
String f_name = “List_Filmes.txt”;
SequentialListComExcecaoObject l = new SequentialListComExcecaoObject(438);
try {
FileReader fr = new FileReader (f_name);
BufferedReader in = new BufferedReader (fr);
String line;
while ((line=in.readLine())!= null){
Filmes f = AchaTokens (line);
l.insert(f);
}
in.close ();
}
catch (IOException e) {
System.out.println (e+" Erro na leitura do arquivo "+f_name);
}
catch (NumberFormatException e){
System.out.println(“Erro de leitura de número.”+e);
}
catch (OverflowException e){
System.out.println(“OVERFLOW!”);
}
return l;
}

private static Filmes AchaTokens(String line){
        Filmes f;
        String tk[] = line.split(";");
        String pk[] = line.split("\(");
        f = new Filmes (tk[0], tk[1], tk[2], pk[0], Integer.parseInt(tk[3]));
        return f;
}

}

class Filmes{
private String genero;
private String ano;
private String nome;
private String nomeIng;
private int totLoc;

public Filmes (String genero, String ano, String nome, String nomeIng, int totLoc) {
            this.genero = genero;
            this.ano = ano;
            this.nome = nome;
            this.nomeIng = nomeIng;
            this.totLoc = totLoc;
}

public String getNome(){
    return this.nome;
}
public String getAno(){
    return this.ano;
}
public String getGenero(){
    return this.genero;
}
public int getTotLoc(){
    return this.totLoc;
}
public String getNomeIng(){
    return this.nomeIng;
}

public void montaFilme(){
    System.out.println(genero+";"+ano+";"+nome+";"+totLoc);
}
public void print(){
    System.out.println("Nome do Filme: "+ nome);
    System.out.println("Ano de Lançamento: "+ ano);
    System.out.println("Gênero do Filme: "+ genero);
    System.out.println("Total de Locações: "+ totLoc);
}

}[/code]

Uma maneira facil e simples e você implementar a interface Comparable e la você personaliza sua comparação e fazer um algoritmo de ordenação usando

filmes1.comparaTo(filmes2).

Ou vc pode implementar a interface Comparator personalizando seu comparador e depois vc utiliza o metodo

Collections.sort(sequentialListComExcecaoObject, new suaClasseDeComparação.

huumm, beleza, vou tentar, assim que eu terminar e achar a solução eu posto aqui.
Se alguem tiver mais uma ideia, pode postar em :slight_smile:
ajuda é sempre bem-vinda hehe

Dei um jeito e funcionou Oo
fiz um casting e deu…