Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Diablo II Resurrected: il nuovo DLC Reign of the Warlock
Diablo II Resurrected: il nuovo DLC Reign of the Warlock
Abbiamo provato per voi il nuovo DLC lanciato a sorpresa da Blizzard per Diablo II: Resurrected e quella che segue è una disamina dei nuovi contenuti che abbiamo avuto modo di sperimentare nel corso delle nostre sessioni di gioco, con particolare riguardo per la nuova classe dello Stregone
Deep Tech Revolution: così Area Science Park apre i laboratori alle startup
Deep Tech Revolution: così Area Science Park apre i laboratori alle startup
Siamo tornati nel parco tecnologico di Trieste per il kick-off del programma che mette a disposizione di cinque startup le infrastrutture di ricerca, dal sincrotrone Elettra ai laboratori di genomica e HPC. Roberto Pillon racconta il modello e la visione
HP OMEN MAX 16 con RTX 5080: potenza da desktop replacement a prezzo competitivo
HP OMEN MAX 16 con RTX 5080: potenza da desktop replacement a prezzo competitivo
HP OMEN MAX 16-ak0001nl combina RTX 5080 Laptop e Ryzen AI 9 HX 375 in un desktop replacement potente e ben raffreddato, con display 240 Hz e dotazione completa. Autonomia limitata e calibrazione non perfetta frenano l'entusiasmo, ma a 2.609 euro è tra le proposte più interessanti della categoria.
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: 2688
[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: 2688
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


Diablo II Resurrected: il nuovo DLC Reign of the Warlock Diablo II Resurrected: il nuovo DLC Reign of the...
Deep Tech Revolution: così Area Science Park apre i laboratori alle startup Deep Tech Revolution: così Area Science P...
HP OMEN MAX 16 con RTX 5080: potenza da desktop replacement a prezzo competitivo HP OMEN MAX 16 con RTX 5080: potenza da desktop ...
Recensione Google Pixel 10a, si migliora poco ma è sempre un'ottima scelta Recensione Google Pixel 10a, si migliora poco ma...
6G, da rete che trasporta dati a rete intelligente: Qualcomm accelera al MWC 2026 6G, da rete che trasporta dati a rete intelligen...
Sora all'interno di ChatGPT: aumentano g...
L'Ufficio dell'Ispettore Generale ha ana...
Primo contatto con Volvo ES90: ammiragli...
La Cina potrebbe puntare con maggiore de...
Un clamoroso errore strategico: il nuovo...
Cos’è il nuovo cartello del "...
HP: gli attacchi con l'IA puntano su vel...
Acer compie 50 anni e si trasforma: dall...
La rete elettrica USA funziona solo a me...
La Corte Costituzionale albanese: 'Il ba...
Secondo trailer del nuovo anime di Ken i...
La guerra tra Russia e Ucraina arriva co...
KadNap: il botnet che ha infettato 14.00...
Il cloud è sempre più cent...
Lisuan svela la GPU gaming LX 7G106: deb...
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: 19:54.


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