Bug con costruttori

di il
4 risposte

Bug con costruttori

Non riesco a capire perchè il tezo costruttore di Frazioni, quello con la stringa, rende 1 il denominatore, comne se fosse impostato su zero!
NON SO PROPRIO DOVE SBAGLIO ... allego il codice.

Grazie.

public class mainProgram {
	public static void main(String[] args) {
		
		// Utilizzo della classe Frazioni ... con i 3 costruttori
		Frazioni f = new Frazioni(24,0);
		System.out.println("primo costruttore " + f.ToString());
		
		Frazioni f2 = new Frazioni(13);
		System.out.println("secondo costruttore " + f2.ToString());
		
		Frazioni f3 = new Frazioni("12/3");
		System.out.println("terzo costruttore " + f3.ToString());
	}
}


public class Frazioni {
// Stato interno classe Frazioni
	int num = 0, den = 0;

// Costruttori ...
	
	public Frazioni(int num, int den){ //Costruttore principale(più completo), riceve sia il numeratore che il denominatore.
		this.num = num;
		
		if (this.den == 0) this.den = 1; // Se il denominatore è zero, l'imposta automaticamente ad 1 ...
		else this.den = den; // ... altrimenti assegna il valore.
	}
	
	public Frazioni(int num){ // Costruttore secondario ... solo numeratore, il denominatore impostato automaticamente ad 1.
		this(num,1);
	}
	
	public Frazioni(String f){ // Costruttore secondario ... denominatore e numeratore in formato stringa(f ="10/5")
		this(Integer.parseInt(f.split("/")[0]),Integer.parseInt(f.split("/")[1])); // split crea al volo un vettore di stringhe.
	}
	
	// Metodi ...
	public String ToString(){ // Metodo pubblico per stampare a video la frazione ...
		return num + "/" + den; // Valori convertiti automaticamente in stringa, perchè è un espressione mista(interi e stringhe)
	}
}

4 Risposte

  • Re: Bug con costruttori

    nelloskybus ha scritto:


    Non riesco a capire perchè il tezo costruttore di Frazioni, quello con la stringa, rende 1 il denominatore, comne se fosse impostato su zero!
    NON SO PROPRIO DOVE SBAGLIO ... allego il codice.

    if (this.den == 0) this.den = 1; // Se il denominatore è zero, l'imposta automaticamente ad 1 ...
    La parte che ho segnato in rosso è quella sbagliata. Stai testando il campo (che è ancora a 0) invece che il parametro.

    P.S. basta anche semplicemente:
    this.den = den == 0 ? 1 : den;
  • Re: Bug con costruttori

    Perfetto funge ... grazie tante

    ho deciso comunque di utilizzarlo così
    
    public Frazioni(int num, int den){ //Costruttore principale(più completo), riceve sia il numeratore che il denominatore.
    		this.num = num;
    		
    		if (den == 0) this.den = 1; // Se il denominatore è zero, l'imposta automaticamente ad 1 ...
    		else this.den = den; // ... altrimenti assegna il valore.
    	}
    
    Onestamente non ho capito perché testo il campo in quel modo ...

    vorrei utilizzare
    this.den = den == 0 ? 1 : den;

    ma onestamente non sono ancora in grado di capire questo codice compatto ... ma anche meno leggibile. Potresti spiegarmelo se hai tempo?

    TANTE GRAZIE ... DEL TUO AIUTO!
  • Re: Bug con costruttori

    nelloskybus ha scritto:


    Onestamente non ho capito perché testo il campo in quel modo ...
    Riferendoti al primo codice iniziale? Lì avevi messo: if (this.den == 0) e testavi il campo, non il parametro.

    nelloskybus ha scritto:


    vorrei utilizzare
    this.den = den == 0 ? 1 : den;

    ma onestamente non sono ancora in grado di capire questo codice compatto ... ma anche meno leggibile. Potresti spiegarmelo se hai tempo?
    Non è meno leggibile ..... anzi, è perfettamente leggibile (oltre che compatto), se si conosce l'operatore "condizionale" ?:

    condizione ? valore1 : valore2

    se condizione è true, l'espressione complessiva ha valore valore1, altrimenti valore2.
  • Re: Bug con costruttori

    Perfetto grazie ho capito
Devi accedere o registrarti per scrivere nel forum
4 risposte