Newsgroup: it.comp.java
Titolo: problema con le frazioni

ciao
sto facendo degli esercizi e mi sono incartato credo in una piccolezza ma
non risco ad uscirne
allora ho una classe che si chiama frazione data dal testo. questa classe
ha fra gli altri i seguenti metodi :
public boolean isMaggiore(Frazione f);
public boolean isMinore(Frazione f);
public int getNumeratore();
public int getDenominatore();
L'esercizio mi chiede di trovare date N frazioni la più piccola e la più
grande.
Ho fatto come segue ma si blocca a compilare quando trova il riferimento a
fmaggiore e fminore... dice cannot find symbol ma a me pare di aver fatto
tutto per bene... avete idea di dove sto sbagliando?
Si blocca al primo if dopo il while e mi evidenzia sempre gli oggetti
fmaggiore e fminore come se non li riconoscesse...
Grazie a chi mi aiuterà
Excelsior
Stefano
import prog.io.*;
import prog.utili.*;
class Es314 {
 
        public static void main(String[] args) {
        //predisposizione dei canali di comunicazione
        ConsoleInputManager in = new ConsoleInputManager();
        ConsoleOutputManager out = new ConsoleOutputManager();
 
        int num, den, num2, den2, num3, den3, num4, den4;
        boolean continua;
 
        //creo il numeratore e il denominatore della prima frazione
        num = in.readInt("Numeratore della prima frazione: ");
        den = in.readInt("Denominatore della prima frazione: ");
        //creo la prima frazione
        Frazione f1 = new Frazione(num, den);
        //creo il numeratore e il denominatore della seconda frazione
        num2 = in.readInt("Numeratore della seconda frazione: ");
        den2 = in.readInt("Denominatore della seconda frazione: ");
        //creo la seconda frazione
		Frazione f2 = new Frazione(num2, den2);	
		//chiedo se si vuole inserire una nuova frazione
        continua = in.readSiNo("Nuova frazione? (s/n)");
 
        if (continua){
                //memorizzo i valori maggiori e minori delle prime 2
frazioni
                //in 2 nuovi oggetti frazione
                if (f1.isMinore(f2)){
                        num3 = f1.getNumeratore();
                        den3 = f1.getDenominatore();
                        Frazione fminore = new Frazione(num3, den3);
 
                        num4 = f2.getNumeratore();
                        den4 = f2.getDenominatore();
                        Frazione fmaggiore = new Frazione(num4, den4); 
                }
                else{
                        num3 = f2.getNumeratore();
                        den3 = f2.getDenominatore();
                        Frazione fminore = new Frazione(num3, den3);
 
                        num4 = f1.getNumeratore();
                        den4 = f1.getDenominatore();
                        Frazione fmaggiore = new Frazione(num4, den4);
                }
                while(continua){
                   //costruisco le nuove frazioni (non so quante)
                   num = in.readInt("Numeratore? ");
                   den = in.readInt("Denominatore? ");
                   Frazione nuova = new Frazione(num, den);
                   //controllo se la nuova frazione è minore...
                   if (nuova.isMinore(fminore)){
                        num3 = nuova.getNumeratore();
                        den3 = nuova.getDenominatore();
                        Frazione fminore = new Frazione(num3, den3);
                   }
                   //controllo se la nuova frazione è maggiore...
                    if (nuova.isMaggiore(fmaggiore)){
                        num4 = nuova.getNumeratore();
                        den4 = nuova.getDenominatore();
                        Frazione fmaggiore = new Frazione(num4, den4);
                   }
                   //chiedo se si vuole inserire una nuova frazione
                   continua = in.readSiNo("Nuova frazione? (s/n)");   
                }   
             out.println("La frazione minore e' " + fminore.toString());
             out.println("La frazione maggiore e' " +
fmaggiore.toString());      
        }
        if (f1.isMinore(f2)){    //se f1 è minore di f2
                        out.println("La frazione minore e' " +
f1.toString());
                        out.println("La frazione maggiore e' " +
f2.toString());
        }
        else{
                        out.println("La frazione minore e' " +
f2.toString());
                        out.println("La frazione maggiore e' " +
f1.toString());
        }      
  }        
}            


fminore e fmaggiore sono visibili solo all'interno dell'if.
Per renderli visibili anche sotto (dove li usi) li devi dichiarare
insieme a f1.
Ovviamente non puoi usare questo costruttore (perche' ha bisogno di
num3, den3, num4, den4 che non essitono all'inizio), ma uno vuoto:
Frazione fminore = new Frazione();
e poi nella classe Frazione definire un metodo (o piu' metodi) per
settare in den e il num dell'oggetto. Esempio:
public setPar(int num,int den)
{
   numeratore = num; //numeratore e denominatore sono variabili
private di Frazione
   denominatore = den;
}
e poi nell'if usi:
fminore.setPar(num3,den3);
fmaggiore.setPar(num4,den4);
eccetera.
Ciao Jack

 settare in den e il num dell'oggetto. Esempio:
scusa ti rispondo solo adesso perchè ho avuto dei problemi...
se tiu dicessi che setPar non lo so usare perchè non l'abbiamo ancora
fatto? questa parte di libro m ichiede di svolgere l'esercizio senza dire
con precisione come bypassare il problema della visibilità degli oggetti.
Onestamente credevo che una volta creato l'oggetto fosse sempre disponibile
invece vedo che devo stare attendo anche a dove sono i vari oggetti...
Nella prima parte dell'If costruisco gli oggetti fminore e fmaggiore per
fare sì da poterli riutilizzare subito sotto ma sembra che non funzioni
così e non saprei proprio come aggirare il problema...
come mi devo comportare?
Grazie 1000
Stefano


vedo che usi un getDenominatore() e un getNumeratore().
Il setPar(num,den), oppure, se preferisci, setDenominatore(den) e
setNumeratore(num) sono metodi che definisci esattamente come i
getxxx(). Solo che invece di ritornare qualcosa lo settano.
Premesso che io non so' come e' fatta la classe Frazione, sara' una
cosa cosi piu' o meno:
class Frazione{
private int denominatore;
private int numeratore;
public Frazione(){  //costruttore di default
    numeratore = 0;
   denominatore = 1;
}
public Frazione(int num, int den){  //costruttore con parametri
   numeratore = num;
   denominatore = den;
}
public int getDenominatore(){
   return denominatore;
}
public int fetNumeratore(){
    return numeratore;
}
}
piu' altra roba che ti serve a fare le somme, sotrazione ecc.
ci puoi aggiungere dei metodi che ti permettono di modificare il
numeratore e il denominatore anche quando hai gia' istanziato una
frazione. sono i metodi set(). Se guardi le API vedrai che ogni classe
ne ha qualcuno.
Puoi definire ad esempio:
public void setNumeratore(int num){
  numeratore = num;
}
questo ti modifica la variabile privata numeratore con il parametro di
ingresso num.
per usarlo fai una cosa del genere:
 fraz.setNumeratore(5); //dove 5 e' il valore che vuoi dare al
numeratore.
Cmq per il tuo esercizio: lo stai facendo in maniera molto complicata.
Sono sicuro che se ci pensi un po' trovi una maniera migliore per
trovare la minore e la maggiore di N frazioni (hint: usa un array)
Ciao Jack