Esercizio di comparazione

di il
17 risposte

17 Risposte - Pagina 2

  • Re: Esercizio di comparazione

    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
  • Re: Esercizio di comparazione

    Shark95 ha scritto:


    Dici che va bene così?
    Tecnicamente è corretto. Nel senso che l'approccio minimale è quello.

    Shark95 ha scritto:


    Oppure va snellito ulteriormente?
    Sì, si può snellire abbastanza. Non servirebbe tenere la variabile valore (di per sé nemmeno lung1 e lung2). La parte finale (quella di confronto delle lunghezze) si può abbreviare sfruttando l'operatore condizionale ?: se vuoi fare confronti con < e > . Ma c'è anche un modo più semplice: una banale sottrazione delle lunghezze (e non si incorre nel overflow ... la lunghezza di un array non è mai negativa!).
  • Re: Esercizio di comparazione

    andbin ha scritto:


    Tecnicamente è corretto. Nel senso che l'approccio minimale è quello.

    Shark95 ha scritto:
    Oppure va snellito ulteriormente?

    Sì, si può snellire abbastanza. Non servirebbe tenere la variabile valore (di per sé nemmeno lung1 e lung2). La parte finale (quella di confronto delle lunghezze) si può abbreviare sfruttando l'operatore condizionale ?: se vuoi fare confronti con < e > . Ma c'è anche un modo più semplice: una banale sottrazione delle lunghezze (e non si incorre nel overflow ... la lunghezza di un array non è mai negativa!).
    Ok andbin l'ho snellito usando l'operatore ?: ed ora è più leggibile. Grazie mille per l'aiuto a presto
Devi accedere o registrarti per scrivere nel forum
17 risposte