Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    883

    (java) Come si ordina un vettore di oggetti

    Ho un array di oggetti: Scenario[] s1
    Ciascuno di questi oggeti ha tra gli attributi un intero (sequence)
    Devo ordinare l'array di oggetti in maniera descrescente secondo il campo sequence

    Come si fa?
    Ho scritto una classe che implementa l'interfaccia

    codice:
    public class MyComparator implements Comparator {
    
    
    	public int compare(Object o1, Object o2)
    	{
    
    	Scenario[] s1 = (Scenario[])o1,
    	              s2 = (Scenario[])o2;
    
    	int sequence1 = s1[0].getSequenceNumber();
    	int sequence2 = s2[0].getSequenceNumber();
    
    	return sequence1>sequence2;////??????
    	}
    }

    Però non so come andare avanti nella stesura del codice

  2. #2
    Utente di HTML.it L'avatar di floyd
    Registrato dal
    Apr 2001
    Messaggi
    3,837
    if (sequence1 > sequence2)
    return 1;
    else if (sequence2 > sequence1)
    return -1;
    else
    return 0;

    dovrebbe bastare il metodo Arrays.sort(Object[])

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    883
    quindi devo scrivere così?

    Arrays.sort(arrayOfScenario, new MyComparator();

    ??

  4. #4
    Utente di HTML.it L'avatar di floyd
    Registrato dal
    Apr 2001
    Messaggi
    3,837
    sort(Object[])
    devi far implementare Comparable a Scenario e implemetare il metodo public int compare(Object o1, Object o2)

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    883
    l'oggetto scenario non lo posso modificare, un'altra soluzioni esiste?

  6. #6
    Utente di HTML.it L'avatar di floyd
    Registrato dal
    Apr 2001
    Messaggi
    3,837
    Arrays.sort(arrayOfScenario, new MyComparator());

    mi era sfuggito

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    883
    La classe comparator che ho scritto non penso vada bene alle righe che ti ho segnato
    come la correggo?

    codice:
    public class MyComparator implements Comparator {
    
    
    	public int compare(Object o1, Object o2)
    	{
    
    	Scenario[] s1 = (Scenario[])o1,
    	              s2 = (Scenario[])o2;
    
    	//errore sto considerando solo il primo elemento dell'array
    	int sequence1 = s1[0].getSequenceNumber();
    	//secondo errore, sto sempre considerando solo il primo elemento dell'array
    	int sequence2 = s2[0].getSequenceNumber();
    
    	int result = 0;
    
    	if (sequence1 > sequence2)
    		result = 1;
    	else if (sequence2 > sequence1)
    		result = -1;
    	else
    		result = 0;
    
    
    	return result;
    }

  8. #8
    Utente di HTML.it L'avatar di floyd
    Registrato dal
    Apr 2001
    Messaggi
    3,837
    la immaginavo così

    if (o1 instanceof Scenario && o2 instanceof Scenario) {
    Scenario s1 = (Scenario)o1;
    Scenario s2 = (Scenario)o2;
    int sequence1 = s1.getSequenceNumber();
    int sequence2 = s2.getSequenceNumber();
    } else {
    throw new Exception("Class not Scenario");
    }

  9. #9
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    883
    ok, appena posso, provo e ti faccio sapere
    grazie dell'aiuto

  10. #10
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Credo che questo sia un po' più chiaro:
    codice:
    public class MyComparator implements Comparator {
       public int compare(Object o1, Object o2) {
          int sequence1 = (Scenario) o1.getSequenceNumber();
          int sequence2 = (Scenario) o2.getSequenceNumber();
          return sequence1 - sequence2;
       }
       ...
    }
    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.