Ordinare array di oggetti in base a un attributo

di il
2 risposte

Ordinare array di oggetti in base a un attributo

Devo ordinare un array di oggetti(Contatti) in base al cognome del contatto.
Ho creato un metodo dedicato che avrei pensato di richiamare nel metodo stampa().
Ma tutto questo mi da un errore o delle eccezioni da gestire.

Exception in thread "main" java.lang.NullPointerException
at PhoneBook.ordina(PhoneBook.java:30)
at PhoneBook.stampa(PhoneBook.java:45)
at MainClass.main(MainClass.java:13)

public Contact[] ordina(Contact[] contacts)
	{
		for(int i=0;i<contacts.length-1;i++)
		{
			for(int j=i+1;j<contacts.length;j++)
			{
				if(contacts[i].getLast().compareTo(contacts[j].getLast())>0)
				{
					Contact tmp;
					tmp = contacts[i];
					contacts[i]=contacts[j];
					contacts[j]=tmp;
				}
				
			}
		}
		return contacts;
	}

public void stampa()
	{
		ordina(contacts);
		for(int i=0;i<contacts.length;i++)
		{
			if(contacts[i]!=null)
				System.out.println(contacts[i]+" "+i);
		}
	}
Grazie in anticipo per l'aiuto.

2 Risposte

  • Re: Ordinare array di oggetti in base a un attributo

    Se non devi per forza implementare tu l'algoritmo di ordinamento (es. per motivi "didattici"), non serve!

    La comparazione e l'ordinamento degli oggetti sono già affrontati nel framework standard. Ci sono i sort() (in java.util.Arrays e java.util.Collections) che si basano sulle interfacce Comparable/Comparator.

    Fai una ricerca sul forum, ne ho parlato molte volte.


    P.S. in ogni caso, se hai un NullPointerException vuol dire che stai cercando di usare un reference null. Quale è la riga 30 di PhoneBook.java?? A "naso" direi naturalmente la

    if(contacts[i].getLast().compareTo(contacts[j].getLast())>0)

    Quindi: uno degli elementi in contacts è null ... oppure hai un oggetto Contact che ha il "last" a null.
    Se è lecito che questo possa succedere (dipende da te, da come gestisci le cose) allora devi prenderlo in considerazione nella comparazione.
    E se i null sono leciti, allora devi anche stabilire se un null deve venire prima o dopo dei valori non-null.
  • Re: Ordinare array di oggetti in base a un attributo

    Grazie tante per l'aiuto. Risolto!
Devi accedere o registrarti per scrivere nel forum
2 risposte