Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [Primi Approcci] static main() da errore

    Ciao, sono alle prime armi perciò sto facendo degli esercizi davvero stupidi per prendere confidenza con java.
    In questo caso sto lavorando in una singola classe che fa un overload di un metodo, utilizzando parametri differenti. Quello che riscontro però non è un problema dell'overload bensì quando richiamo i membri da passare all'interno dei main.

    Comincio dalla classe e dal costruttore
    codice:
    public class libero {
    
    	public libero() {
    	    int x = 0;
    	    double y = 0;
    	}
    fin qui mi sembra di non aver sbagliato nulla, dichiaro la classe ed il costruttore con due variabili di tipo differente e le inizializzo.

    Poi dichiaro l'overload e le istruzioni dei metodi
    codice:
    	//overload
    	public int somma(int a, int b) {
    		int totale = a + b;
    		return totale;
    	}
    	
    	public double somma(double c, double d) {
    	    double totale = c + d;
    		return totale;
    	}
    ed anche qui nessun problema, mi pare di aver scritto tutto correttamente.
    Infine chiamo il main
    codice:
    	public static void main(String[] args) {
    		x = somma(2,3);
    		y = somma(2.5,3.2);
    		System.out.println(x);
    		System.out.println(y);
    	}
    Capisco che può sembrare una sciocchezza, ma per me che sono all'inizio proprio non riesco a capire quale sia il problema.
    Gli errori che la console mi riporta sono:
    Non riesce a risolvere x e y come variabili (eppure nel costruttore le ho dichiarate e inizializzate)
    Non riesce a referenziare in un metodo statico (main) due metodi non statici.
    In pratica se tolgo il modificatore static su main si risolve il problema.

    Quello che non capisco è...perchè? i due metodi devono essere perforza statici? chiaramento se aggiungo ai metodi il modificatore static non appare più il problema, ma onestamente vorrei capire il nesso.

    Grazie
    http://codecanyon.net/category/all?ref=Manuelandro
    And I bet she told a million people that she'd stay in touch, Well all the little promises they dont mean much,When theres
    memories to be made

  2. #2
    Utente di HTML.it L'avatar di Dark867
    Registrato dal
    Mar 2010
    Messaggi
    435
    Main è un metodo statico e quindi può richiamare solo altri metodi statici, questo xké è legato alla classe e non all'oggetto in particolare.
    Per usare quindi metodi normali devi instanziare un oggetto, quindi nel main devi fare:
    codice:
    libero lib = new libero();
    int x = lib.somma(2,3);
    I nomi delle classi in java vanno scritti iniziando cn lettera maiuscola cmq.

  3. #3
    Siccome i metodi somma() non utilizzano istanze di classe, ma sono eclusivamente dei metodi di utilità sarebbe ancora meglio dichiarare statici i metodi stessi:

    codice:
    public static int somma(int a, int b) {
    	int totale = a + b;
    	return totale;
    }
    	
    public static double somma(double c, double d) {
        double totale = c + d;
        return totale;
    }
    Così non ti dovrebbe più dare errore.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  4. #4
    grazie mille per le risposte. ora sto iniziando a capire un pò di più (anche se è tosta.. )

    Riscrivendo meglio il codice, secondo i vostri suggerimenti, il problema della staticità è risolto, ma continua a non leggermi le varibili x e y che poi passo come parametri.
    Ho scritto così:

    codice:
    public class libero {
    
    	public libero() {
    	    int x = 0;
    	    double y = 0;
    	}
    	
    	public static void main(String[] args) {
    		Fai var = new Fai();
    		x = var.somma(2,3);
    		y = var.somma(2.5,3.2);
    		System.out.println("Numero " + x);
    		System.out.println("Numero " + y);
    	}
    }
    
    
    class Fai {
    	//overload
    	public int somma(int a, int b) {
    		int totale = a + b;
    		return totale;
    	}
    	
    	public double somma(double c, double d) {
    	    double totale = c + d;
    		return totale;
    	}
    }
    http://codecanyon.net/category/all?ref=Manuelandro
    And I bet she told a million people that she'd stay in touch, Well all the little promises they dont mean much,When theres
    memories to be made

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Se ti riferisci a quelle del main() è normale. Tu dichiari le variabili nel costruttore!
    Le variabili di istanza si dichiarano fuori dal costruttore, e generalmente si da a loro un valore iniziale grazie al costruttore.
    Le variabili hanno no scope (visibilità), ed al di fuori di esso non possono essere visti. Se dichiari una variabile in un metodo X, quella variabile non è visibile al di fuori di X.

    Quindi:

    codice:
    public class libero {
      int x;
      int y;  // oppure puoi fare int x, y;
    
      public libero() {
        x = 0; // in realtà sarebbe evitabile in quanto
        y = 0; // di default le variabili (int) di istanza hanno valore 0
      }
    
      // ..................
    L'iniziale del nome della classe dovrebbe essere in maiuscolo ^^

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 © 2024 vBulletin Solutions, Inc. All rights reserved.