Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

My name is Jan Lucas

Ordem Alfabética de Array de referencias

Recommended Posts

boa noite galera.

Seguinte:

 

Tow desenvolvendo um trabalho que eu tenho um array de referencias os objetos referenciados possuem o atributo nome.

E tenho que ordenar o array mostrando todos os nomes dos objetos em ordem alfabética.

É só isso.

 

Andei pesquisando sobre -> Arrays.sort( Object[] seuarray); Mas não consigo aplicar isso ao meu programa.

 

Alunos[] inf = new Informatica[40];
System.out.println("Qual o nome do aluno?");
String nome = input.next();

//controleInf faz o controle das posições
//e sempre insere uma posição após a que ja está preenchida.

inf[controleInf] = new Informatica(nome);
controleInf += controleInf++;

E agora eu quero exibir os alunos existentes em ordem alfabética. Como faço? Alguem me ajuda Por favor.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não sou muito bom para explicar essas coisas, mas acho que esse código te ajudará a entender como fazer isso.

Qualquer dúvida quanto ao código pergunte ai, ou pesquise =P

 

package array_sorting;

import java.util.Arrays;

//A classe do objeto deve implementar a interface Comparable
class mObj implements Comparable<mObj> {
	int id;
	String nome;
	
	public mObj(int id, String nome){
		this.id = id;
		this.nome = nome;
	}
	
	public String toString(){
		return id + ", " + nome;
	}

	// Método que compara do jeito que você quer
	@Override
	public int compareTo(mObj o) {
		return this.nome.compareTo(o.nome);
	}
}

public class ArraySort {
	
	public static void main(String args[]) {
		// Vetor de objetos
		mObj[] objetos = {
				new mObj(1, "Jose"),
				new mObj(2, "Maria"),
				new mObj(3, "Antonio"),
				new mObj(4, "Fulano"),
				new mObj(5, "Fulana"),
				new mObj(6, "Fuuuu"),
				new mObj(7, "Djow")
			};
		
		// Ordena segundo o método compareTo do objeto
		Arrays.sort(objetos);
		
		for( mObj o : objetos )
			System.out.println(o);
	}
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não sou muito bom para explicar essas coisas, mas acho que esse código te ajudará a entender como fazer isso.

Qualquer dúvida quanto ao código pergunte ai, ou pesquise =P

 

package array_sorting;

import java.util.Arrays;

//A classe do objeto deve implementar a interface Comparable
class mObj implements Comparable<mObj> {
	int id;
	String nome;
	
	public mObj(int id, String nome){
		this.id = id;
		this.nome = nome;
	}
	
	public String toString(){
		return id + ", " + nome;
	}

	// Método que compara do jeito que você quer
	@Override
	public int compareTo(mObj o) {
		return this.nome.compareTo(o.nome);
	}
}

public class ArraySort {
	
	public static void main(String args[]) {
		// Vetor de objetos
		mObj[] objetos = {
				new mObj(1, "Jose"),
				new mObj(2, "Maria"),
				new mObj(3, "Antonio"),
				new mObj(4, "Fulano"),
				new mObj(5, "Fulana"),
				new mObj(6, "Fuuuu"),
				new mObj(7, "Djow")
			};
		
		[code]// Ordena segundo o método compareTo do objeto
		Arrays.sort(objetos);
		
		for( mObj o : objetos )
			System.out.println(o);[/code]
	}
}

Não deu pra entender muita coisa. Mas tipo tava atrás de uma solução imediata pq o programa é pra amanha hehe. Ai nao daria tempo pesquisar e ainda tow no inicio de OO.

 

 

 

 

Duvidas:

--Pq a class mObj deve implemenat Comparable?

--Mas como o compilador vai saber que é para imprimir o atributo nome do Objeto? Ou ele tá ordenando de acordo com o id?

aki ->

// Ordena segundo o método compareTo do objeto
		Arrays.sort(objetos);
		
		for( mObj o : objetos )
			System.out.println(o);
??

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Duvidas:

--Pq a class mObj deve implemenat Comparable?

--Mas como o compilador vai saber que é para imprimir o atributo nome do Objeto? Ou ele tá ordenando de acordo com o id?

aki ->

// Ordena segundo o método compareTo do objeto
		Arrays.sort(objetos);
		
		for( mObj o : objetos )
			System.out.println(o);
??

 

--Pq a class mObj deve implemenat Comparable?

Esse tópico você irá ver mais adiante no conteúdo de OO. Mas adiantando um pouco, essa interface (Comparable) abstrai o objeto para que ele possa ser comparado com algum outro objeto. Se você abrir o código dessa interface, você verá que ela possui apenas o método compareTo(), que é o que o método sort() usa para verificar como ordenar. (se ficou confuso de entender veja alguns materiais sobre interfaces em java que você irá sacar isso)

 

--Mas como o compilador vai saber que é para imprimir o atributo nome do Objeto? Ou ele tá ordenando de acordo com o id?

Aqui entra outro esquema fera do java, o método toString() do objeto. Veja que na classe mObj eu escrevi ele:

public String toString(){
    return id + ", " + nome;
}
Quando um objeto possui esse método, você pode coloca-lo no System.out.println() que o sistema irá buscar o método toString() do objeto, então quando eu chamo System.out.println(o) é a mesma coisa que fazer System.out.println(o.toString())

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu tentei fazer com o meu Sistema. Só que ele acusa erro pq o Override de compareTo retorna somente o tipo "int" E eu não estou usando id. Estou querendo somente o nome. Há outro método!? COmo eu poderia utiliza-lo?

 

segue o código

 

public class Informatica extends Alunos implements Comparable {
private String criaSoftware;
public Informatica(String nome){
super(nome);
	}

//aqui ocorre um Override em java.lang.Object.toString.
public String toString() {
	return getNome();
	}

@Override   //aqui é a implementação do metodo compareTo
public int compareTo(Object o) {
		return nome.compareTo(o.nome);
	}
}

*Nao sei como fazer pra retornar a String Nome Ordenada em Alfabetica. PQ ele só retorna int.

*Outra coisa é que em compareTo(Object o), de acordo com seu codigo ali acima, eu teria que colocar no lugar de Object o nome da classe, no meu caso seria Informatica. Mas não dá certo ele tira o Override de compareTo(Object o) e fica com erro dizendo que não implementei este metodo.

 

Tipo Tow correndo atrás de resolver isso logo, pq é pra hoje! dia 23/09

Muito agradecido pela tua ajuda cara. Tow aprendendo muita coisa nova. =D

http://forum.imasters.com.br/public/style_emoticons/default/clap.gif http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

O método compareTo deve sempre retorna um int. Por que?

Sempre que você compara uma coisa, você espera três coisas

1) se o objeto comparado for menor que o outro.

2) se os objetos são iguais

3) se o objeto comparado for maior que o outro.

 

para isso você deve retorna um número menor que 0 no caso 1), 0 no caso 2) e um número maior que 0 no caso 3).

 

Quando eu fiz

// Método que compara do jeito que você quer
@Override
public int compareTo(mObj o) {
      return this.nome.compareTo(o.nome);
}
Eu retornei o resultado da comparação da string nome com o nome do objeto passado. Faça esse teste:

String a = "Nome1";
String b = "Nome2";

System.out.println(a.compareTo(B));
E veja o valor que esse compareTo retorna. Veja também que o objeto "String" do Java também implementa a interface Comparable.

 

Voltando ao seu problema, para comparar os objetos por nome você deve fazer:

@Override   //aqui é a implementação do metodo compareTo
public int compareTo(Object o) {
                return this.getNome().compareTo((Informatica) o.getNome());
        }
}
Você deve fazer um cast (o Informatica entre parenteses) para o java intender que o objeto é do tipo Informatica. Ou colocar assim lá na declaração da classe:

public class Informatica extends Alunos implements Comparable<Informatica> {
...
Usei getNome() porque eu acho que a String nome está como private no seu código, faça alguns testes por ai, tente de todas as maneiras que você pensar, pq assim você vai tendo uma noção do que pode ou não fazer. Quando você pegar aula na facul sobre isso vai ser muito mais di boa entender.

E qualquer coisa estamos aew. =P

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.