andbin ha scritto:
Infatti quello che hai scritto è incompleto/insensato. Quei valore++ e valore-- non hanno senso (cioè non si fa così, normalmente) e non hai nemmeno contemplato tutti gli scenari che ho citato io.
Hai ragione, rileggendo meglio mi sono reso conto di aver male interpretato gli ultimi suggerimenti che mi hai dato nell'apposito post. Infatti seguendoli, ho riscritto il codice, però per come l'ho scritto mi sembra ancora un po' troppo complesso. Inoltre mi sono reso conto che l'implementazione di compare con l'aggiunta di zeri all'array più piccolo è
sbagliata perché in effetti se io avessi un array di interi negativi aggiungere zeri farebbe sbagliare tutto l'ordinamento al metodo sort.
Comunque ecco qui l'ultimo codice che ho scritto e che dovrebbe funzionare:
@Override
public int compare(MyArray a, MyArray b)
{
int[] array1 = a.getArray();
int[] array2 = b.getArray();
int lung1 = array1.length;
int lung2 = array2.length;
int valore;
int min = Math.min(lung1,lung2);
for (int i=0; i<min; i++)
{
if (array1[i] > array2[i]) return 1;
else if (array1[i] < array2[i]) return -1;
}
if (lung1 > lung2) valore=1;
else if (lung1 < lung2) valore=-1;
else valore=0;
return valore;
}
Giustamente se la lunghezza del primo array è maggiore di quella del secondo, il valore viene settato a 1 per forza perché significa che il primo array va messo
dopo il secondo. Per il caso contrario, in cui la lunghezza del primo array è minore di quella del secondo il valore viene settato a -1.
Dici che va bene così? Oppure va snellito ulteriormente?
Buon appetito