Array di double

di il
2 risposte

Array di double

Ciao a tutti,
sto preparando un esame e ho riscontrato difficoltà in un esercizio la cui richiesta è la seguente: implementare una classe automobile che ha un solo campo che è il numero di km ed è ordinabile in base a quella; fare un main, costruire 4 automobili e restituire la più vecchia (qurlla con numero massimo di km) e la somma di km delle 4 auto.

Vi allego il codice fatto da me:



import java.util.Arrays;

public class Array {
public static void main(String[] args) {
Automobile a1 = new Automobile(18.3);
Automobile a2 = new Automobile(15.0);
Automobile a3 = new Automobile(6);
Automobile a4 = new Automobile(19.2);
Automobile[] p = new Automobile[] {a1, a2, a3, a4};
System.out.println(Arrays.toString(p));
System.out.println("auto con più km: "+ trovaAutoPiuVecchia(p));
System.out.println("somma km auto: "+ sommaAutoKm(p));
}


//MAX NUMERO KM
private static Automobile trovaAutoPiuVecchia(Automobile[] p) {
// TODO Auto-generated method stub
Automobile piuVecchia = null;
if (p.length>0) {
int pMin = 0;
for (int i = 0; i<p.length-1; i++) {
if(p.getKm() > p[pMin].getKm()) {
p[(int) pMin] = p;
}
piuVecchia = p[pMin];
}
}
return piuVecchia;
}

//SOMMA DEI KM DELLE AUTO
private static double sommaAutoKm(Automobile[] p) {
// TODO Auto-generated method stub
double sum = 0.0;

if (p.length > 0) {
for(int i = 0; i<p.length-1; i++) {
sum += p.km;
}
}
return sum;
}

}

class Automobile implements Comparable<Automobile> {

double km;

public Automobile(double km) {
this.km = km;
}

public double getKm() {
return km;
}

public void setKm(double km) {
this.km = km;
}

@Override
public String toString() {
return " " + km + "";
}

@Override
public int compareTo(Automobile a) {
// TODO Auto-generated method stub
return Double.compare(this.km,a.getkm());
}

Innanzitutto ho dichiarato la variabile km double, l'override del compareTo è corretto?
Altri errori sono nell'implementazione dei metodi, un array si conta a partire da posizione 0 a length-1 ma ciò mi da errori nell'output: come valore massimo mi restituisce 18.3 invece di 19.2 e anche la somma non è corretta.

Ringrazio anticipatamente per l'aiuto.

2 Risposte

  • Re: Array di double

    Minnie ha scritto:


    l'override del compareTo è corretto?
    Sì è corretto, con l'unica svista che hai scritto getkm invece di getKm (che è il nome corretto del metodo).

    Hai passato un campo e il ritorno di un metodo. In questi casi meglio essere più simmetrici:

    return Double.compare(getKm(), a.getKm());

    o se vuoi proprio esplicitare il this (che sarebbe superfluo):

    return Double.compare(this.getKm(), a.getKm());


    Minnie ha scritto:


    Altri errori sono nell'implementazione dei metodi, un array si conta a partire da posizione 0 a length-1 ma ciò mi da errori nell'output: come valore massimo mi restituisce 18.3 invece di 19.2 e anche la somma non è corretta.
    Il trovaAutoPiuVecchia l'hai fatto più complicato di quello che servirebbe (non serve quel pMin !).

    Il sommaAutoKm è "quasi" corretto. La condizione del for dà un ciclo in meno. Se controlli l'indice per < è sufficiente che sia minore del length.
    Ovvero, basta: i<p.length
    Non: i<p.length-1

    Il test del p.length > 0 di per sé non servirebbe (c'è già il for che "protegge" su questo). Semmai, in ottica generale, si potrebbe testare che il reference ricevuto non sia null.
  • Re: Array di double

    Ho sistemato il codice e mi è tutto chiaro. Grazie mille!
Devi accedere o registrarti per scrivere nel forum
2 risposte