- Messaggi: 133
- Ringraziamenti ricevuti 25
Aiuto per Java
Il problema è questo:
"Creare una classe cerchio che ha come attributo il raggio e due metodi:
uno che restituisca la circonferenza ed uno che restituisca l'area del cerchio.
I valori calcolati devono essere visualizzati con due decimali.
Creare il main per testare la classe ed i metodi."
Io per iniziare ho cominciato dal creare la classe Cerchio, poi dalla classe creare la variabile "raggio", una costante chiamata "PIGRECO.
E qui parte il primo problema. Ossia perché non posso dichiarare la costante come tipo float ma sono invece costretto a usare il tipo double? Se uso il tipo float mi dice che è un tipo incompatibile e che ci può essere una perdita con la conversione da double a float.
Qui la foto su questo dettaglio:
postimg.cc/bZ3PKJ8g
Dopo gli attributi io devo dichiarare i metodi, e adeguandomi all'uso di tutto dichiarato come double (per non perdere tempo con la storia di prima), risulta diciamo tutto a posto.
"public double circonferenzaCerchio(){
double circonferenza = (2 * raggio * PIGRECO);
return circonferenza;
}
public double areaCerchio(){
double area = ((raggio * 2) * PIGRECO);
return area;
}"
Mi funziona tutto qui, ma prima di lasciare la classe, vorrei chiedere se sia necessario inserire nellla classe public Cerchio "extends" seguito poi dal main. Qui risulta necessario?
Finito poi il discorso sulla classe, passo al main e qui comincia il vero e proprio problema che proprio non riesco a comprendere.
Inserisco all'interno del system.out.println() il nome del metodo (ricordo sempre messo come pubblico) subito dopo fuori dalle doppie virgolette seguite poi dal '+'.
Ho provato poi anche a stampare i metodi senza le virgolette ma sempre indicando l'errore di "cannot find symbol".
Qui la foto:
postimg.cc/LYcwMwx4
Repetita iuvant!
Si prega Accesso a partecipare alla conversazione.
File Cerchio.java:
import java.lang.Math;
public class Cerchio {
private final double raggio;
public Cerchio(float raggio) {
this.raggio = raggio;
}
public double Circonferenza() {
return this.raggio * 2 * Math.PI;
}
public double AreaCerchio() {
return Math.pow(this.raggio, 2) * Math.PI;
}
}
File Main.java
public class Main {
public static void main(String args) {
Cerchio c = new Cerchio(3);
System.out.println(c.Circonferenza());
System.out.println(c.AreaCerchio());
}
}
Rispondendo ai problemi che hai avuto tu:
Il primo problema è dato dal fatto che hai un double (3.14) e cerchi di assegnarlo a una variabile double. In java quando fai un assegnamento tipo x = 3.14, quel "3.14" viene interpretato come double e poi assegnato a cos'hai a sinistra. Se a sinistra hai una variabile di tipo float, java cerca di convertire il numero da double a float. In Java le variabili double sono appunto "il doppio" in termini di dimensione di un float, quindi convertendo da double a float hai potenzialmente una perdita di informazione (dipende dal numero e da quante cifre ha).
Per il secondo problema stai chiamando nel main direttamente i metodi (areaCerchio e Circonferenza) così come sono, come se fossero funzioni. Il problema è che quelle non sono funzioni ma metodi di una classe, quindi prima devi istanziare un cerchio (Cerchio c = new Cerchio(40)) e poi su quella istanza (c) chiamare i metodi, ad esempio "c.Circonferenza()". L'errore "cannot find symbol" è dato dal fatto che scritto così sembra una funzione, java va a caccia di una funzione e non ne trova nessuna che si chiama così (perché in realtà era un metodo).
Spero di essere stato d'aiuto
P.S. Che cavolo ci fa una domanda del genere su LC?
Si prega Accesso a partecipare alla conversazione.
- Messaggi: 133
- Ringraziamenti ricevuti 25
Ti dico che comunque ce l'ho fatta a comprendere bene il funzionamento facendola in questo modo:
- main:
- Classe Cerchio
Si io ero abituato al linguaggio C, e vedere questa cosa in Java che funziona oin modo differente mi aveva mandato in cirsi di stress non poco. Già per esempio mi bloccavo fin dall'inizio per queste cose banali.Il primo problema è dato dal fatto che hai un double (3.14) e cerchi di assegnarlo a una variabile double. In java quando fai un assegnamento tipo x = 3.14, quel "3.14" viene interpretato come double e poi assegnato a cos'hai a sinistra. Se a sinistra hai una variabile di
tipo float, java cerca di convertire il numero da double a float. In Java le variabili double sono appunto "il doppio" in termini di dimensione di un float, quindi convertendo da double a float hai potenzialmente una perdita di informazione (dipende dal numero e da quante cifre ha).
Pure questo mamma mia...Per il secondo problema stai chiamando nel main direttamente i metodi (areaCerchio e Circonferenza) così come sono, come se fossero funzioni. Il problema è che quelle non sono funzioni ma metodi di una classe, quindi prima devi istanziare un cerchio (Cerchio c = new Cerchio(40)) e poi su quella istanza (c) chiamare i metodi, ad esempio "c.Circonferenza()".
Questo è la cosa più mi ha fatto sclerare.L'errore "cannot find symbol" è dato dal fatto che scritto così sembra una funzione, java va a caccia di una funzione e non ne trova nessuna che si chiama così (perché in realtà era un metodo).
Assolutamente mi ha datto felicità ricevere risposta su queste cose, e pur nonostante non stessi ricevendo risposta non mi sono caduto di morale e mi sono messo a studiarmi un pò seguendo anche qualche video di Edoardo Midali (molto bravo).Spero di essere stato d'aiuto
MA perché no ahahahah. Dico che dopottutto ero cosciente che praticamente la stragrande maggioranza della gente del sito non ne sapesse quasi una sega di ste cose, ma ho confidato comuqnue in quella piccola percentuale di qualcuno che conosca la materia. Inoltre ho pure approfittato perché la gente del sito è ben molto più cordiale di altri siti dove è più frequente rispondere in modo brusco,.... Quindi mi sono detto è come cogliere due piccioni con una fava,.P.S. Che cavolo ci fa una domanda del genere su LC?
Terza cosa, a modo mio differenzio i temi classici dal sito dando una boccata d'aria che tiri un'aria da 'pausa'.
Ciao.
Repetita iuvant!
Si prega Accesso a partecipare alla conversazione.