Newsgroup: it.comp.java
Titolo: Problema da newbie...lunghetto.

Salve,
sono un neo studente in informatica, a regime part time perchè
lavoro(infatti scrivo dal negozio), e in quanto tale non ho modo di seguire
le lezione e chierirmi certi dubbi.
Ieri seguendo la lezione di laboratorio di linguaggi(il lunedì mattina è
l'unico momento libero che ho), mi vengono proposti degli esercizi sulle
classi.
Io non le avevo ancora studiate, me mi ci sono messo di buzzo buono e ho
capito i conscetti... credo... ma non sono riuscito a metterli in pratica.
Prima di scrivere qui ho letto decine di post su newsgroup e diverse guide
on line, oltre che naturalmente il mio libro di testo,
ma non sono venuto a capo del mio problema.
Io ho creato una classe Contocorrente.java che riporto di seguito ed una
classe Conto che dovrebbe attingere ai metodi di Contocorrente.java per fare
le sue operazioni, anche questo ve lo riporto.
Morale della favola: mi dice che stò tentando di passare dei dati non
statici in un contesto statico...(????)
Se metto int nella classe contocorrente come descrittore del tipo ritornato,
il compilatore mi richiede una funzione di return (che qui ho incluso), non
me lo chiede se specifico void (che sottintende che la funzione non ritorna
dei valori), me questo forse non c'entra...
Se qualcuno avesse qualche idea e me ne rendesse partecipe gliene sarei
infinitamente grato... anche perchè tutti gli esempi che trovo in giro
parlano di metodi statici, e non dinamici come quelli che stò studiando io!
Grazie a chiunque potrà aiutarmi!
Stefano.
public class Contocorrente
 {
   int somma=0;
   int cc=0;
  public int versamento(int importo)
  {
   somma = somma + importo;
   return somma;
  }
  public int prelievo(int importo)
   { if (somma>=importo)
   {somma = somma - importo;
   return somma;}
   else
    {System.out.println("Operazione impossibile:insufficienza fondi.");
    return somma;}
   }
  public void estratto()
   { System.out.print("cc:");
     System.out.println(cc);
     System.out.println(somma);
   }
   }
----------------------------------------------
public class EsercizioConto
{public static void main(String[] args)
    {//Contocorrente Conto=new Contocorrente();
 int somma;
 int contante;
 System.out.println("Menu:");
 System.out.println("1) Prelievo.");
 System.out.println("2) Versamento.");
 System.out.println("3) Estratto conto.");
 System.out.println("0) Esci.");
 int scelta=Console.readInt("Scelta: ");
 while (scelta != 0)
     {
  if (scelta==1)
      { contante=Console.readInt("Immetti l'importo da prelevare: ");
        somma=Contocorrente.prelievo(contante);
      }
  else if (scelta==2)
      {
   contante=Console.readInt("Immetti l'importo da versare: ");
   somma=Contocorrente.versamento(contante);
      }
  else if (scelta==3)
      Contocorrente.estratto();
  else
  System.out.println("Scelta errata");
  System.out.println("Menu:");
  System.out.println("1) Prelievo.");
  System.out.println("2) Versamento.");
  System.out.println("3) Estratto conto.");
  System.out.println("0) Esci.");
  scelta=Console.readInt("Scelta: ");
     }
    }
}


{

------------NUOVI LISATI--------------
public class Contocorrente
 { public Contocorrente() // Ecco qui il mio costruttore(credo si chiami
così 'sto coso)... la dove le variabili assumono un valore e la classe non
fa' piu' acqua!
   {somma=0;
      }
public int versamento(int importo)
  {
   somma = somma + importo;
   return somma;                            //altro particolare
importante... se una funzione deve restituire un valore... return e' il
vostro comando!
  }
  public int prelievo(int importo)
   { if (somma>=importo)
   {somma = somma - importo;
   return somma;}
   else
    {System.out.println("Operazione impossibile:insufficienza fondi.");
    return somma;}
   }
  public void estratto()
   { System.out.print("cc:");
     System.out.println(somma);
     System.out.println(cc);
   }
    private int somma; // le variabili, negli esempi che ho letto vengono
dichiarate alla fine... ovviamente funzionerebbero anche se messe all'inzio,
   private int cc;         // del resto penso che l'importante e' che si
trovino nel corpo principale e non in un sotto corpo... ora verifico...
confermo.
    }
---------------
Le mie sono ovviamente osservazioni da newbie fatte da un newbie, ma in
quanto tali, essendo scevre da tednicismi, potrebbero essere utili ad altri
novellini.
Saluti!!!
Stefano

 
Per la pratica ti ha già risposto Giovanni Martone, secondo me devi
andare a guardarti anche un po' di teoria, perché i due concetti che
stanno sotto a queste cose sono importantissimi.
Probabilmente il tuo libro inizia facendoti lavorare su istanze, e a
un certo punto ti introduce i metodi statici: non è che si è
dimenticato di trattare quelli "dinamici", quelli non static sono
quelli che usavi fino a quel momento!
In brevissimo: un attributo "non static" (dichiarato senza il
modificatore static) è diverso da istanza a istanza, ogni volta che
fai new ne crei una copia; un attributo "static" è comune a tutte le
istanze, ne esiste una sola copia per cui chi lo modifica lo modifica
per tutti.
Un metodo "static" è innanzitutto una scelta semantica: se sto
offrendo funzionalità che prescindono dallo stato della singola
istanza, funzionalità comuni (come Math.sqrt, il metodo che ricava la
radice quadrata che ci offre la classe Math); se lavoro solo con
attributi static; allora probabilmente ha senso che il metodo venga
dichiarato static. Per invocarlo è decisamente più chiara la sintassi
Classe.metodo che non istanza.metodo, per quanto anche questa sia
lecita.
Ora faccio io una domanda: i metodi non statici sono detti
"dinamici"?????? mai sentito....
ciao
tityrus

        somma=Contocorrente.prelievo(contante);
Il metodo va richiamato sull'oggetto, non sulla classe:
somma = conto.prelievo(contante);
Ugualmente per le altre invocazioni.
Una curiosità: cosa stai usando come editor/ambiente?
-- 
Ciao
	Fabrizio C.

 e non tipoClasse.nomeMetodo (infatti la classe non č static)
                                       ^^^^^^^^^^^^^^^^^^^^^^
Di nuovo non capisco. :-(
-- 
Ciao
	Fabrizio C.

 Una curiosità: cosa stai usando come editor/ambiente?
Uso TextPad 4.5, un programmino shareware, e' lo stesso che usiamo
all'università.
Ho provato JBuilder, ma e' pesante, occupa una cifra di spazio e la sua
mania di completarmi i comandi secondo un criterio tutto suo mi fà uscire di
testa!!!!
Grazie di tutto!
A presto.
Stefano.