codice:
Si realizzi una classe che implementa l'interfaccia GenericNumber (descritta nella
pagina seguente) e che sia in grado di manipolare numeri generici (numeri interi e
numeri in virgola mobile). Trattare i numeri in virgola mobile come dei Double.
In seguito si realizzi un programma Java, attraverso il metodo main() della stessa
classe, che prenda in input un file di testo contenente, per ogni riga, un'espressione
aritmetica e restituisca i risultati di tali espressioni in un file di output (i calcoli
dovranno essere effettuati utilizzando la nuova classe che implementa
GenericNumber).
Input
Il file di input contiene una sequenza di espressioni aritmetiche, una per ogni riga.
Il primo valore di ogni riga rappresenta il numero di operandi presenti
nell'espressione. Ogni espressione aritmetica coinvolge non pił di 10 operandi.
Gli operatori sulla sinistra hanno prioritą rispetto agli operatori sulla destra, quindi
l'espressione 3 + 4 – 5 * 7 – 3 č da interpretarsi come (((3 + 4) – 5) * 7) – 3.
Ogni espressione puņ contenere sia numeri interi che numeri in virgola mobile.
Il file di output contiene i risultati delle espressioni aritmetiche presenti nel file di
input, uno per ogni riga. All'inizio di ogni riga č presente una stringa, tra parentesi
tonde, che indica se il risultato č un integer (integer) o un floating point (floating)

Ecco l'interfaccia
codice:
public interface GenericNumber {
// ritorna true se il valore dell'oggetto č un intero
public boolean isInteger();
// ritorna true se il valore č un numero in virgola mobile
public boolean isFloating();
// assegna all'oggetto un valore intero pari a i
public void setValue(int i);
// assegna all'oggetto un valore in virgola mobile pari a d
public void setValue(double d);
// ritorna il valore delloggetto, se č in virgola mobile,
// ritorna 0 altrimenti
public double getFloatingValue();
// ritorna il valore dell'oggetto, se č un intero, 0 altrimenti
public int getIntValue();
// confronta il valore dell'oggetto
// con il valore del numero generico x
public boolean equals(GenericNumber x);
// effettua la moltiplicazione con il numero generico x
// ritorna l'oggetto stesso
public GenericNumber mul(GenericNumber x);
// divide il valore dell'oggetto per un numero generico x
// ritorna l'oggetto stesso
public GenericNumber div(GenericNumber x);
// effettua l'addizione con il numero generico x
// ritorna l'oggetto stesso
public GenericNumber add(GenericNumber x);
// sottrae al valore dell'oggetto il numero generico x
// ritorna l'oggetto stesso
public GenericNumber min(GenericNumber x);
// converte il valore dell'oggetto in una stringa
public String toString();
}
Ora il fatto che ci siano isInteger e Double e il fatto che si parli di oggetti mi porta a pensare che si debbano usare variabili boxed, o sbaglio?

Il mio problema č, quando creo la classe che implementa l'interfaccia, avrņ un oggetto che di per se come parametro avrą un valore, o Int, o Double.
Come faccio io nel costruttore a inserire questo parametro dato che non posso specificare se č int o double a priori?

Cioč in un costruttore si avrebbe una cosa cosģ:

codice:
int numero;
String colore;

public Pennarello(int numero, String colore)
{
	...
}
Molto facilmente, ma qui cosa passo come parametro?

codice:
public class NumeroGenerico implements GenericNumber
{
	private GenericNumber value;
	
	public NumeroGenerico(GenericNumber value)
	{
		this.value=value;
	}
Non credo funzioni...