Aiuto per Java

  • robyale
  • Autore della discussione
  • Offline
  • Utente
  • Utente
  • Con me le stelle si sono tutte dis-allineate.
Di più
1 Anno 3 Mesi fa #51696 da robyale
Aiuto per Java è stato creato da robyale
Salve, ho bisogno di un aiuto su questo programma di base sul cerchio, e più in particolare per la corretta sintassi della visualizzazione di un metodo.proveniente da una classe, dentro il main (chiamato pure tester). Preciso che come ambiente di sviluppo uso Apache NetBeans 15.
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.

Di più
9 Mesi 1 Settimana fa - 9 Mesi 1 Settimana fa #52920 da nogiJisu
Risposta da nogiJisu al topic Aiuto per Java
Ciao, questa è una valida soluzione:

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? :D
Ultima Modifica 9 Mesi 1 Settimana fa da nogiJisu.
I seguenti utenti hanno detto grazie : robyale

Si prega Accesso a partecipare alla conversazione.

  • robyale
  • Autore della discussione
  • Offline
  • Utente
  • Utente
  • Con me le stelle si sono tutte dis-allineate.
Di più
9 Mesi 1 Settimana fa - 9 Mesi 1 Settimana fa #52921 da robyale
Risposta da robyale al topic Aiuto per Java
Grazie mille.
Ti dico che comunque ce l'ho fatta a comprendere bene il funzionamento facendola in questo modo:

- main:
Code:
/**  *  * @author roberto  */ public class TRA_J8_Cerchio{     /**      * @param args the command line arguments      */     public static void main(String args) {         // TODO code application logic here         System.out.print("Es. recupero secondo quadrimestre es.8 con Java con i calcoli per la circoferenza e l'area del cerchio\n\n");                  Cerchio cerchio = new Cerchio();                  System.out.print("Visualizzazione della circonferenza del cerchio: %.2f" + cerchio.circonferenzaCerchio());                  System.out.println("Visualizzazione dell'area del cerchio: %.2f"+ cerchio.areaCerchio());     } }


- Classe Cerchio
Code:
package tra_j8_cerchio; /**  *  * @author roberto  */ public class Cerchio extends TRA_J8_Cerchio{          public float raggio = 5;         final double PIGRECO = 3.14;          public double circonferenzaCerchio(){         double circonferenza = (2 * raggio * PIGRECO);                  return circonferenza;     }     public double areaCerchio(){         double area = ((raggio * 2) * PIGRECO);                  return area;     } }

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).

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.

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()".

Pure questo mamma mia...

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).

Questo è la cosa più mi ha fatto sclerare.

Spero di essere stato d'aiuto

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).

P.S. Che cavolo ci fa una domanda del genere su LC? :D

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,.
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!
Ultima Modifica 9 Mesi 1 Settimana fa da robyale.

Si prega Accesso a partecipare alla conversazione.

Tempo creazione pagina: 0.234 secondi
Powered by Forum Kunena