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

    [Java] Semplice programma, errore strano!

    Con questo codice

    codice:
    public class Interfaccia {
    		
    	public Interfaccia() {
    		
    		sommatoria = 0;
    	}	
    	
    	public Interfaccia(int valore)	{
    		
    		sommatoria = valore;
    	}
    	
    	public static void main(String[] args) {
    		
    		System.out.println("Somma : " + sommatoria + "\n");
    	}
    	
    	private int somma(int primo_addendo,int secondo_addendo) {
    		
    		primo_addendo += secondo_addendo;
    		
    		return primo_addendo;
    	}
    	
    	private int sommatoria = 0;
    	
    }
    Eclipse mi dice che in main si fa riferimento statico ad un elemento non-statico, in particolare alla variabile "sommatoria";

    Come mai? Come posso risolverlo?

    Ah dato che mi trovo, come risolvo il fatto che nn esistono le chiamate per riferimento???

    THX

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Aggiungi il modificatore static alla variabile sommatoria: non puoi accedere ad elementi non statici quando sei in un contesto statico (come il main):
    codice:
    private static int sommatoria = 0;
    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

  3. #3
    Significa che in main posso solo usare variabili statiche???

    Che mi dici mai!?!?!?!?

    Cmq grazie 10.000!!!

  4. #4
    Si'.
    Se ci pensi bene sarebbe strano il contrario.
    Folle e' l'uomo che parla alla luna.
    Stolto chi non le presta ascolto.

  5. #5
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425

    Re: [Java] Semplice programma, errore strano!

    Originariamente inviato da Jack.cpp
    Con questo codice
    ...

    Ah dato che mi trovo, come risolvo il fatto che nn esistono le chiamate per riferimento???
    ...
    in Java esistono _solo_ le chiamate per riferimento per quanto riguarda gli oggetti.

    Tutti gli oggetti creati in Java sono puntatori, quindi per farti l'esempio in C++

    codice:
    ...
    Oggetto* o;// per riferimento, java ha solo questo ma è implicito
    o = new Oggetto(param);
    ...
    Oggetto o(parametro);// per valore, in java gli oggetti così non esistono
    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  6. #6
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    Originariamente inviato da Jack.cpp
    Significa che in main posso solo usare variabili statiche???
    se ti fa strano questo credo tu non abbia capito cos'è una variabile e un metodo statico, essi sono dei membri della classe comuni a tutte le istanze e acessibili anche dalla classe senza la creazione necessaria di un oggetto.

    Visto che un metodo static non possiede un riferimento a this(l'oggetto chiamante) non potrebbe chiamare un membro che necessita della creazione di un oggetto visto che non saprebbe a cosa riferirsi.


    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  7. #7
    in Java esistono _solo_ le chiamate per riferimento per quanto riguarda gli oggetti.
    In realta' credo che la situazione sia meglio descritta dicendo che tutte le variabili sono reference (puntatori) e vengono passate per valore (Il valore del puntatore) lasciando da parte ovviamente i tipi primitivi...
    Se infatti e' vero che posso modificare i campi dell'oggetto passato come parametro, non posso pero' cambiare l'oggetto puntato, nel senso che quando il metodo ritorna, il parametro effettivo puntera' ancora allo stesso oggetto.

    Questa "limitazione" si risolve ripensando e riprogettando meglio la propria applicazione.
    Ogni volta che si incoccia in essa, infatti, e' indice che si sta cercando di rompere l'incapsulamento.
    Folle e' l'uomo che parla alla luna.
    Stolto chi non le presta ascolto.

  8. #8
    io ti consiglierei di evitare di inserire la tua logica applicativa all'interno del main.

    Per banalizzare, invece di

    codice:
    public static void main(String[] args) {
    	
    	System.out.println("Somma : " + sommatoria + "\n");
    }
    sarebbe meglio:


    codice:
    public static void main(String[] args) {
    	Interfaccia interfaccia = new Interfaccia();
            miaSommatoria = interfaccia.getSommatoria();
    	System.out.println("Somma : " + miaSommatoria + "\n");
    }

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.