Visualizzazione dei risultati da 1 a 5 su 5

Discussione: Codice java con errore

  1. #1

    Codice java con errore

    Buongiorno a tutti, premetto di essere alle prime armi con la programmazione java. Poco fa ho provato a scrivere un semplice programma che dato il raggio restituisce l'area.
    codice:
    import java.util.Scanner;
    
    public class cerchio {
        private int raggio;
    
        @SuppressWarnings("unused")
        private void raggio(int raggio){
            this.raggio = raggio;
        }
        public int getRaggio() {
            return raggio;
        }
    
        public void setRaggio(int raggio) {
            Scanner input = new Scanner(System.in);
            raggio = input.nextInt();
            this.raggio = raggio;
        }
        
        public static void main(String[] args){
            cerchio area = new cerchio();
            double area1 = area1.getRaggio(raggio)*area1.getRaggio(raggio)*3.1415;
        }
    }
    Siccome intendo programmare ad oggetti non ho seguito il suggerimento di Eclipse di rendere static la variabile raggio, che ora figura come errore. Come posso risolverlo?
    Grazie

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da luca93abc Visualizza il messaggio
    codice:
        public void setRaggio(int raggio) {
            Scanner input = new Scanner(System.in);
            raggio = input.nextInt();
            this.raggio = raggio;
        }
    Questo non ha assolutamente senso.

    Quote Originariamente inviata da luca93abc Visualizza il messaggio
    codice:
        @SuppressWarnings("unused")
        private void raggio(int raggio){
            this.raggio = raggio;
        }
    Questo ha il nome del metodo inappropriato, oltre che essere private quindi poco utile.

    Quote Originariamente inviata da luca93abc Visualizza il messaggio
    Siccome intendo programmare ad oggetti
    Bene, allora definisci una classe Cerchio che ha la proprietà "raggio" (quindi il campo private e relativi metodi getter/setter) e un metodo che calcola e restituisce l'area. Stop, non deve fare input, nessun uso di Scanner o cose del genere.

    Poi fai una classe es. TestCerchio dove nel main usi Scanner, chiedi raggio, crei un cerchio con il raggio e determini l'area che poi stampi.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    PS: oltre a tutto quello che già ha detto andbin, stai anche facendo un altro errore (che sicuramente Eclipse segnala... probabilmente è un errore di copia-incolla qui sul forum):


    codice:
        public static void main(String[] args){
            cerchio area = new cerchio();
            double area1 = area1.getRaggio(raggio)*area1.getRaggio(raggio)*3.1415;
        }

    Stai cercando di richiamare il metodo "getRaggio()" su una variabile di tipo double, che, oltretutto, stai definendo sulla stessa riga...


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  4. #4
    Grazie mille! Penso ora di aver capito: creo le due classi in questo modo
    codice:
    package cerchio;
    
    public class cerchio {
        private int raggio;
    
        public cerchio(int raggio) {
            this.raggio = raggio;
        }
    
        public int getRaggio() {
            return raggio;
        }
    
        public void setRaggio(int raggio) {
            this.raggio = raggio;
        }
        public double area(int raggio){
            double area = raggio * raggio * 3.1415;
            return area;
        }
        public double lunghezza(int raggio){
            double lunghezza = raggio * 2 * Math.PI;
            return lunghezza;
        }
    }
    e la seconda
    codice:
    package cerchio;
    
    import java.text.DecimalFormat;
    import java.util.Scanner;
    
    public class area {
        public static void main(String[] args) {
            Scanner input = new Scanner(System.in);
            System.out.println("Raggio: ");
            int raggio = input.nextInt();
            cerchio cer1 = new cerchio(raggio);
            System.out.println("L'area del tuo cerchio è: " + cer1.area(raggio) + " e la lunghezza della circonferenza è: " +cer1.lunghezza(raggio));
        }
    
    }
    La compilazione va a buon fine e il codice funziona (fa quello che deve). Formalmente è corretto come programmazione ad oggetti?
    Grazie

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da luca93abc Visualizza il messaggio
    codice:
        public double area(int raggio){
            double area = raggio * raggio * 3.1415;
            return area;
        }
        public double lunghezza(int raggio){
            double lunghezza = raggio * 2 * Math.PI;
            return lunghezza;
        }
    Così no. Non devi ricevere un ulteriore raggio ... devi usare lo "stato" dell'oggetto su cui invochi area o lunghezza.

    Quote Originariamente inviata da luca93abc Visualizza il messaggio
    Formalmente è corretto come programmazione ad oggetti?
    Salvo quanto ti ho indicato sì, è appropriato. Le classi andrebbero con le parole in maiuscolo, es. DecimalFormat, Scanner, ecc...
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.