Tralasciamo per un momento la classe Main e concentriamoci sulla classe Numero che ha alcune cose che non vanno.Originariamente inviato da Nikopol
codice:class Numero { public Numero (double m){ this.m=m; } private double m; private double nuovoM; public double getM (){ return m; } public double somma (Numero unM){ nuovoM=m+unM.getM(); return nuovoM; } public double sottrai (Numero unM){ nuovoM=m-unM.getM(); return nuovoM; } public int compareTo (Numero unM){ int x=0; nuovoM=m; if (nuovoM<unM.getM()){ x=-1; } else if (nuovoM==unM.getM()){ x=0; } else if (nuovoM>unM.getM()){ x=1; } return x; } @Override public String toString(){ return nuovoM+"\n"; } }
Innanzitutto la classe Numero ha lo scopo di "modellare" 1 numero ... non 2. Quindi non devi avere 2 campi di istanza ma 1 solo.
Poi quando si devono compiere delle "operazioni" come somma/sottrai, a livello concettuale ci sono (tipicamente) due modi per gestire la modifica lavorando a livello di oggetti:
Modo 1)
I metodi somma/sottrai modificano lo "stato" dell'oggetto su cui sono invocati. Quindi ad esempio:
public void somma(Numero unM) { ..... }
e invocando: num1.somma(num2);
Lo stato di num1 si aggiorna con il risultato di num1+num2
Modo 2)
I metodi somma/sottrai restituiscono un nuovo oggetto Numero senza alterare né lo stato dell'oggetto su cui sono invocati, né quello passato come argomento. Ad esempio:
public Numero somma(Numero unM) { ..... }
e invocando: Numero numSomma = num1.somma(num2);
si ottiene un nuovo oggetto Numero con la somma senza alterare num1 e num2.
Tieni bene a mente queste questioni concettuali.
Il compareTo come forma del metodo può anche andare bene. Tieni però presente che esiste la interfaccia Comparable che ha proprio il compareTo. Questo però è per generalizzare la comparazione degli oggetti. Non sei certo obbligato a sfruttare tutto questo. Insomma, il tuo compareTo è solo un metodo come gli altri.
Tecnicamente mi pare corretto il compareTo, salvo il fatto che si potrebbe compattare di più.
I punti più importanti che dovresti sistemare sono i due iniziali: il fatto che deve avere solo 1 campo e la questione delle operazioni somma/sottrai.

Rispondi quotando