Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Wind Tre 'accende' il 5G Standalone in Italia: si apre una nuova era basata sui servizi
Wind Tre 'accende' il 5G Standalone in Italia: si apre una nuova era basata sui servizi
Con la prima rete 5G Standalone attiva in Italia, WINDTRE compie un passo decisivo verso un modello di connettività intelligente che abilita scenari avanzati per imprese e pubbliche amministrazioni, trasformando la rete da infrastruttura a piattaforma per servizi a valore aggiunto
OPPO Find X9 Pro: il camera phone con teleobiettivo da 200MP e batteria da 7500 mAh
OPPO Find X9 Pro: il camera phone con teleobiettivo da 200MP e batteria da 7500 mAh
OPPO Find X9 Pro punta a diventare uno dei riferimenti assoluti nel segmento dei camera phone di fascia alta. Con un teleobiettivo Hasselblad da 200 MP, una batteria al silicio-carbonio da 7500 mAh e un display da 6,78 pollici con cornici ultra ridotte, il nuovo flagship non teme confronti con la concorrenza, e non solo nel comparto fotografico mobile. La dotazione tecnica include il processore MediaTek Dimensity 9500, certificazione IP69 e un sistema di ricarica rapida a 80W
DJI Romo, il robot aspirapolvere tutto trasparente
DJI Romo, il robot aspirapolvere tutto trasparente
Anche DJI entra nel panorama delle aziende che propongono una soluzione per la pulizia di casa, facendo leva sulla propria esperienza legata alla mappatura degli ambienti e all'evitamento di ostacoli maturata nel mondo dei droni. Romo è un robot preciso ed efficace, dal design decisamente originale e unico ma che richiede per questo un costo d'acquisto molto elevato
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 24-11-2008, 21:58   #1
D4rkAng3l
Bannato
 
Iscritto dal: Mar 2004
Città: Roma
Messaggi: 2682
[JAVA] Esercizio che dà qualche problema...help me

Ciao,
stavo rivedendo un'esercitazione presente sulle dispense della proff...

Ci sono due classi da compilare: OperazioniUtili.java che per ora contiene solo 3 metodi (uno che dati due numeri calcola MCD, uno che calcola il segno di un valore ed uno che calcola il valore assoluto di un numero) ed un'altra classe chiamata Frazioni.java che descrive il tipo di dato frazionario (cioè oggetti che contengono frazioni come: 3/2, 7/8, etcetc) tramite due variabili di istanza (num e den che rappresentano appunto il numeratore ed il denominatore diuna frazione) ed una lunga lista di metodi per operare sulle frazioni come somma di frazioni, prodotti di frazioni,..., operatori relazionali, etcetc....

La classe OperazioniUtili.java si compila tranquillamente generando il relativo file .class ma quando provo a compilare la classe Frazioni.java mi dà qualche errore che non capisco da cosa possa dipendere, gli errori sono i seguenti:

C:\Programmi\Crimson Editor\template\esercizi\Frazioni>javac Frazione.java
Frazione.java:85: cannot find symbol
symbol : method calcolaMinimoComuneMultiplo(int,int)
location: class OperazioniUtili
nuovoDen = OperazioniUtili.calcolaMinimoComuneMultiplo(den, F.den);
^
Frazione.java:106: cannot find symbol
symbol : variable OperzioniUtili
location: class Frazione
nuovoDen = OperzioniUtili.calcolaMinimoComuneMultiplo(F.den, den);
^
Frazione.java:130: cannot find symbol
symbol : method calcolaMinimoComuneMultiplo(int,int)
location: class OperazioniUtili
nuovoDen = OperazioniUtili.calcolaMinimoComuneMultiplo(den, F.den);
^
Frazione.java:151: cannot find symbol
symbol : variable OperzioniUtili
location: class Frazione
nuovoDen = OperzioniUtili.calcolaMinimoComuneMultiplo(F.den, den);
^
4 errors

C:\Programmi\Crimson Editor\template\esercizi\Frazioni>

I codici delle due classi sono:

Frazioni.java
Codice:
/** Classe che rappresenta l'insieme dei numeri razionali in forma di frazioni */

public class Frazione{
	int num, den;		// Le variabili di istanza che rappresentano il numeratore ed il denominatore
	
	
	/** Il costruttore: costruisce un oggetto di tipo Frazione ed ha 2 variabili di istanza: num e den; Se il valore
	   corrispondente al denominatore è nullo allora costruisce un oggeto privo di significato altrimenti costruisce
	   una frazione standardizzata dal metodo semplificati.
	   @param num di tipo int: il numeratore della frazione
	   @param den di tipo int: il denominatore della frazione */
	
	public Frazione(int num, int den){
		
		if (den != 0){			// Se il denominatore è valido
			this.num = num;
			this.den = den;
			semplificati();		// Invoca il metodo funzionale semplificati per standardizzare la frazione appena creata
		}
		else{					// Se il denominatore non è valido, stampa un messaggio di errore e crea l'oggetto privo di significato
			System.err.println("Errore si stà tentando di creare una frazione a denominatore nullo!");
			num = 0;
			den = 0;			
		}	
    }
    
    /* I metodi di accesso alle variabili di istanza */
    
    /** Se l'oggetto ricevente è non valido, visualizza un messaggio di errore
       @return il valore di tipo int che corrisponde al numeratore dell'oggetto frazione ricevente; se l'oggetto ricevente
       è non valido allora restituisce 0 */
    
    public int getNumeratore(){				// Restituisce un intero pari al valore del numeratore dell'oggetto
    	
    	if(den == 0){
	    	System.err.println("Frazione non valida: denominatore nullo");
    	}
    	return den;
    }
    
    /** Se l'oggetto ricevente è non valido, visualizza un messaggio di errore
       @return il valore di tipo int che corrisponde al denominatore dell'oggetto frazione ricevente; se l'oggetto ricevente
       è non valido allora restituisce 0 */
       
    public int getDenominatore(){			// Restituisce un intero pari al valore del denominatore dell'oggetto
    
    	if(den == 0){
	    	System.err.println("Frazione non valida: denominatore nullo");
    	}
    	return den;
    }
    
    /** Se l'oggetto è non valido, visualizza un messaggio di errore
       @return il valore di tipo double che corrisponde al valore della frazione rappresentata dall'oggetto ricevente;
       se l'oggetto ricevente è non valido, allora restituisce 0 */
    
    public double getValore(){				// Restituisce il valore decimale di una frazione
    	
    	double valore;				// Il valore della frazione
    	
    	if(den == 0){
	    	System.err.println("Frazione non valida: denominatore nullo");
	    	valore = 0;
    	}
    	else{ 
	    	valore = (double) num/den;
    	 }
    	
    	return valore;
    }
    
    /* I metodi operatore */
    
    /** @param F di tipo frazione
        @return il riferimento all'oggetto di tipo Frazione che corrisponde alla somma di F con la frazione rappresentata
        dall'oggetto ricevente se sia l'oggetto ricevente che il parametro F sono frazioni validi, altrimenti restituisce
        il riferimento all'oggetto Frazione non valido */
        
    public Frazione somma(Frazione F){		// Somma la frazione parametro all'oggetto ricevente e alloca un nuovo oggetto
    	
    	int nuovoNum, nuovoDen;
    	Frazione nuovaFrazione;				// è il risultato
    	
    	if(den != 0 && F.den != 0){			// Se entrambe le frazioni sono valide calcola la loro somma
    		nuovoDen = OperazioniUtili.calcolaMinimoComuneMultiplo(den, F.den);
    		nuovoNum = num*(nuovoDen/den) + F.num*(nuovoDen/F.den);
    		nuovaFrazione = new Frazione(nuovoNum, nuovoDen);
		}
		
		else{		// Altrimenti restituisci un messaggio di errore, crea e restituisci una frazione non valida
			System.err.println("Operazione impossibile: frazione non valida");
			nuovaFrazione = new Frazione(0,0);
		}
		
		return nuovaFrazione;
    }
    
    /** Modifica l'oggetto ricevente rendendolo pari alla sua somma con il parametro se l'oggetto ricevente o il parametro
        sono validi, altrimenti l'oggetto ricevente diventa la frazione non valida */
    
    public void sommati(Frazione F){		// Somma la frazione parametro all'oggetto ricevente che va a modificare
    
    	int nuovoDen;		// è la variabile per memorizzare temporaneamente il denominatore della frazione somma
    	
    	if(den != 0 && F.den !=0){			// Se entrambe le frazioni sono valide allora calcoliamo la somma
    		nuovoDen = OperzioniUtili.calcolaMinimoComuneMultiplo(F.den, den);
    		num = num*(nuovoDen/den) + F.num*(nuovoDen/F.den);
    		den = nuovoDen;
    		semplificati();
		}
		
		else{			// altrimenti visualizza un messaggio di errore e modifica l'oggetto ricevente affinchè rappresenti l'oggetto non valido
			System.err.println("Operazione impossibile: frazione non valida");
			num = 0;
			den = 0;
		}
    }
    
    /** @param F di tipo Frazione
        @return il riferimento ad un oggetto di tipo Frazione che corrisponde alla differenza di F con la frazione rappresentata
        dall'oggetto ricevente se entrambe sono frazioni valide, altrimenti restituisci il riferimento all'oggetto Frazione
        non valida */
    
    public Frazione sottrai(Frazione F){
	    
	    int nuovoNum, nuovoDen;
	    Frazione nuovaFrazione;		// è il risultato
	    
	    if(den != 0 && F.den != 0){	// Se entrambe le frazioni sono valide calcola la loro differenza
	    	nuovoDen = OperazioniUtili.calcolaMinimoComuneMultiplo(den, F.den);
	    	nuovoNum = num*(nuovoDen/den) - F.num*(nuovoDen/F.den);
	    	nuovaFrazione = new Frazione(nuovoNum, nuovoDen);
    	}
    	else{						// altrimenti crea l'oggetto frazione non valida e visualizza un messaggio di errore
    		System.err.println("Operazione impossibile: frazione non valida");
    		nuovaFrazione = new Frazione(0,0);
		}
		
		return nuovaFrazione;
	}
	
	/** Modifica l'oggetto ricevente rendendolo pari alla sua differenza con il parametro se sono entrambi validi,
	    altrimenti l'oggetto ricevente diventa non valido
	    @param F di tipo Frazione */
	
	public void sottraiti(Frazione F){
		
		int nuovoDen;
		
		if(den != 0 && F.den !=0){			// Se entrambe le frazioni sono valide allora calcoliamo la differenza
    		nuovoDen = OperzioniUtili.calcolaMinimoComuneMultiplo(F.den, den);
    		num = num*(nuovoDen/den) - F.num*(nuovoDen/F.den);
    		den = nuovoDen;
    		semplificati();
		}
		
		else{			// altrimenti visualizza un messaggio di errore e modifica l'oggetto ricevente affinchè rappresenti l'oggetto non valido
			System.err.println("Operazione impossibile: frazione non valida");
			num = 0;
			den = 0;
		}
	}
		
	/** @param F di ripo Frazione
	    @return il riferimento ad un oggetto di tipo Frazione che corrisponde al prodotto di F con la frazione rappresentata
	    dall'oggetto ricevente se entrambe valide, se una delle due non è valida restituisce il riferimento all'oggetto
	    frazione non valida */
	
	public Frazione moltiplica(Frazione F){
		
		int nuovoNum, nuovoDen;
		Frazione nuovaFrazione;		// è il risultato
		
		if(den != 0 && F.den !=0){		// se entrambe le frazioni sono valide calcola il loro prodotto
			nuovoDen = den*F.den;
			nuovoNum = num*F.num;
			nuovaFrazione = new Frazione(nuovoNum, nuovoDen);
		}
		else{							// Altrimenti stampa un messaggio di errore e restituisci la frazione non valida
			System.err.println("Operazione impossibile: frazione non valida");
			nuovaFrazione = new Frazione(0,0);
		}
		
		return nuovaFrazione;
	}
	
	/** Modifica l'oggetto ricevente rendendolo pari al suo prodotto con il parametro se entrambi sono validi, altrimenti
	    restituisci l'oggetto frazione non valida.
	    @param F di tipo Frazione */
	
	public void moltiplicati(Frazione F){
		
		if(den != 0 && F.den != 0){		// Se entrambe le frazioni sono valide  calcola il loro prodotto
			den = den*F.den;
			num = num*F.num;
			semplificati();
		}
		
		else{	// altrimenti stampa un messaggio di errore e modifica l'oggetto ricevente alla frazione nulla
			System.err.println("Operazione impossibile: frazione non valida");
			num = 0;
			den = 0;
		}
	}
	
	/** @param F di tipo frazione
	    @return il riferimento ad un oggetto di tipo Frazione che corrisponde alla divisione di F con la frazione rappresentata
	    dall'oggetto ricevente se entrambe valide, se una delle due non è valida restituisce il riferimento all'oggetto
	    frazione non valida */
	    
	public Frazione dividi(Frazione F){
		
		int nuovoNum, nuovoDen;
		Frazione nuovaFrazione;		// è il risultato
		
		if(den != 0 && F.den != 0 && F.num != 0){
			nuovoDen = den*F.num;
			nuovoNum = num*F.den;
		    nuovaFrazione = new Frazione(nuovoNum, nuovoDen);
	    }
	    
	    else{
		    System.err.println("Operazione impossibile: frazione non valida");
		    nuovaFrazione = new Frazione(0,0);
	    }
    }
    
    /** Modifica l'oggetto ricevente rendendolo pari alla sua divisione con il parametro se entrambi sono validi, altrimenti
	    restituisci l'oggetto frazione non valida.
	    @param F di tipo Frazione */
	
	public void dividiti(Frazione F){
		if(den != 0 && F.den != 0 && F.num != 0){
			den = den*F.num;
			num = num*F.den;
			semplificati();
		}
		
		else{
			System.err.println("Operazione impossibile: frazione non valida");
			num = 0;
			den = 0;
		}
	}
	
	/** @return il riferimento ad un oggetto di tipo Frazione che corrisponde alla frazione inversa della frazione
	    rappresentata dall'oggetto ricevente se entrambi sono validi, altrimenti restituisce il riferimento all'oggetto
	    di tipo Frazione non valido */
	
	public Frazione inverti(){
		
		Frazione nuovaFrazione;		// è il risultato
		
		if(den != 0 && num != 0){
			nuovaFrazione = new Frazione(den, num);
		}
		else{
			System.err.println("Operazione impossibile: frazione non valida");
		    nuovaFrazione = new Frazione(0,0);
	    }
	    
	    return nuovaFrazione;
    }
    
    /** Modifica l'oggetto ricevente rendendolo pari al suo inverso, se il numeratore dell'oggetto ricevente è nullo
        l'oggetto ricevente diventa nullo, se l'oggetto ricevente non è valido allora non sarà modificato */
    
    public void invertiti(){
	    int nuovoDen;
	    
	    if(den != 0 && num != 0){
		    nuovoDen = num;
		    num = den;
		    den = nuovoDen;
	    }
	    
	    else{
		    System.err.println("Operazione impossibile: frazione non valida");
			num = 0;
			den = 0;
		}
	}
	
	
   /** Eleva alla k-esima potenza l'oggetto ricevente e crea un nuovo oggetto */
   
   public Frazione elevaAPotenza(int k){
	   
	   int nuovoNum, nuovoDen;
	   Frazione nuovaFrazione;
	   
	   if(den != 0){
		   nuovoNum = (int) Math.pow(num, k);
		   nuovoDen = (int) Math.pow(den, k);
		   nuovaFrazione = new Frazione(nuovoNum, nuovoDen);
	   }
	   
	   else{
		   System.err.println("Operazione impossibile: frazione non valida");
		   nuovaFrazione = new Frazione(0,0);
	    }
	    
	    return nuovaFrazione;
    }
    
    /** Modifica l'oggetto ricevente rendendolo la sua k-esima potenza se valido */
    
    public void elevatiAPotenza(int k){
	    if(den != 0){
		    num = (int) Math.pow(num, k);
		    den = (int) Math.pow(den, k);
	    }
	    else{
		    System.err.println("Operazione impossibile: frazione non valida");
			num = 0;
			den = 0;
		}
	}
		    

    
    /* I metodi corrispondenti agli operatori relazionali */
    
    public boolean equals(Frazione F){
	    
	    boolean esito;
	    
	    if(den != 0 && F.den != 0){
		    esito = num == F.num && den == F.den;
	    }
	    else{
		    System.err.println("Confronto impossibile: frazione non valida");
		    esito = false;
	    }
	    
	    return esito;
    }
    
    
    public boolean maggiore(Frazione F){
	    
	    boolean esito;
	    double r1, r2;	// Per memorizzare i valori razionali delle frazioni
	    
	    if(den != 0 && F.den != 0){
		    r1 = getValore();		// Ora r1 contiene il valore razionale dell'ogetto ricevente
		    r2 = F.getValore();		// Ora r2 contiene il valore razionale del parametro F
		    esito = r1 > r2;
	    }
	    else{
		    System.err.println("Confronto impossibile: frazione non valida");
		    esito = false;
	    }
	    
	    return esito;
    }
    
 	
    public boolean maggioreOUguale(Frazione F){
	    
	    boolean esito;
	    
	    if(den != 0 && F.den != 0){
		  esito = num*F.den >= F.num*den;
	    }
	    else{
		    System.err.println("Confronto impossibile: frazione non valida");
		    esito = false;
	    }
	    
	    return esito;
    }
	
    public boolean minore(Frazione F){
	    
	    boolean esito;
	    
	    if(den != 0 && F.den != 0){
		  esito = num*F.den < F.num*den;
	    }
	    else{
		    System.err.println("Confronto impossibile: frazione non valida");
		    esito = false;
	    }
	    
	    return esito;
    }
    
    public boolean minoreOUguale(Frazione F){
	    
	    boolean esito;
	    
	    if(den != 0 && F.den != 0){
		  esito = num*F.den <= F.num*den;
	    }
	    else{
		    System.err.println("Confronto impossibile: frazione non valida");
		    esito = false;
	    }
	    
	    return esito;
    }        
    
    
    
    public String toString(){				// Trasforma in stringa l'oggetto ricevente e restituisce il riferimento ad un oggetto String
    	
    	String risposta = "";				// è la stringa da restituire
    	if(den != 0){
	    	risposta += num + "/" + den;
    	}
    	return risposta; 
    }
    
    /* Il metodo di classe 
     @param d di tipo float
        @return il riferimento ad un oggeto Frazione corrispondente alla rappresentazione di d in forma frazionaria 
    
        public static Frazione convertiAFrazione(float d){
	        
	        String s;				// La rappresentazione di d in forma di stringa
	        int postPunto;			// La posizione della virgola decimale in d
	        int contaDecimali;		// Conta il numero di cifre a destra della virgola
	        int nuovoNum, nuovoDen;	// Numeratore e denominatore della frazione
	        Frazione F;				// L'oggetto da restituire
	        
	        s = String.valueOf(d);	// Trasforma d in stringa
	        
	        if(s.IndexOf(E){
		        System.err.println("Errore: numero non ammesso);
		        F = null;
	        }
	        else{
		        if(postPunto >= 0) nDecimali = s.length()-1-postPunto;
		        else nDecimali = 0;
		         	
    }
    */
    
    /* Il metodo funzionale */
    
    private void semplificati(){	// Lo dichiaro come private in quanto modifica l'oggetto ricevente e non deve poter essere usato nel main
    	
    	int segno;		// Il segno della frazione
    	int divisore;	// Il fattore di semplificazione
    	
    	if(den != 0){
	    	segno = OperazioniUtili.calcolaSegno(num*den);
	    	if(num <= 0) num = -num;
	    	if(den <= 0) den = -den;
	    	
	    	divisore = OperazioniUtili.calcolaMassimoComuneDivisore(num, den);
	    	num = num/divisore*segno;
	    	den = den/divisore;
    	}
    }

}

OperazioniUtili.java

Codice:
public class OperazioniUtili{
	
	public static double calcolaValoreAssoluto(double x){
		
		return Math.sqrt(Math.pow(x,2));
	}
	
	
	public static byte calcolaSegno(double x){
		
		byte sign;		// è il valore da restituire
		
		if(x != 0) sign = (byte)(x/calcolaValoreAssoluto(x));
		else sign = 1;
		
		return sign;
	}
	
	public static int calcolaMassimoComuneDivisore(int x, int y){
		
		int r;
		int MCD = 0;
		
		if(x<=0 || y<=0){
			System.err.println("Input errato: sono richiesti valori positivi");
		}
		else{
			r = x%y;
			MCD = y;
			
			while(r>0){
				y = MCD;
				MCD = r;
				r = y%MCD;
			}
		}
			
			return MCD;
		
	}
	
}
Grazie
Andrea
D4rkAng3l è offline   Rispondi citando il messaggio o parte di esso
Old 24-11-2008, 23:17   #2
malocchio
Senior Member
 
L'Avatar di malocchio
 
Iscritto dal: Feb 2007
Città: Verona
Messaggi: 1060
Ma scusa come fai a richiamare il metodo OperazioniUtili.calcolaMinimoComuneMultiplo se OperazioniUtili contiene solo calcolaSegno, calcolaValoreAssoluto e calcolaMassimoComuneDivisore ???


Eddai
__________________
malocchio è offline   Rispondi citando il messaggio o parte di esso
Old 24-11-2008, 23:27   #3
D4rkAng3l
Bannato
 
Iscritto dal: Mar 2004
Città: Roma
Messaggi: 2682
Quote:
Originariamente inviato da malocchio Guarda i messaggi
Ma scusa come fai a richiamare il metodo OperazioniUtili.calcolaMinimoComuneMultiplo se OperazioniUtili contiene solo calcolaSegno, calcolaValoreAssoluto e calcolaMassimoComuneDivisore ???


Eddai
oddio sò rincoglionito, ora provo
D4rkAng3l è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Wind Tre 'accende' il 5G Standalone in Italia: si apre una nuova era basata sui servizi Wind Tre 'accende' il 5G Standalone in Italia: s...
OPPO Find X9 Pro: il camera phone con teleobiettivo da 200MP e batteria da 7500 mAh OPPO Find X9 Pro: il camera phone con teleobiett...
DJI Romo, il robot aspirapolvere tutto trasparente DJI Romo, il robot aspirapolvere tutto trasparen...
DJI Osmo Nano: la piccola fotocamera alla prova sul campo DJI Osmo Nano: la piccola fotocamera alla prova ...
FUJIFILM X-T30 III, la nuova mirrorless compatta FUJIFILM X-T30 III, la nuova mirrorless compatta
Addio console: Just Dance Now trasforma ...
Driver Radeon Adrenalin 25.10: perch&egr...
Oltre le GPU: NVIDIA annuncia NVQLink, ...
Samsung lancia il Team Galaxy Italia per...
Magic Leap: indistinguibili dai normali ...
Aruba Cloud: trasparenza sui costi e str...
Quando il cloud si blocca e resti al fre...
Integrare per competere, la sfida digita...
Leggenda del rally e modernità: S...
La Python Software Foundation rinuncia a...
Full HD e QLED, è in offerta un TV da 32...
Honda ha rilasciato un nuovo video sul p...
Resident Evil Requiem: arriva su Switch ...
Marshall Acton III in promo su Amazon in...
2 portatili che costano poco ma vanno be...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 06:12.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v