Newsgroup: it.comp.java
Titolo: non capisco un risultato

a un esame e' stato chiesto di guardare il codice e decidere cosa stampa il
seguente programma:
------------
public class Test {
int val = 0, val1=0;
public void processa( int parametro, Test t) {
   parametro++;
   t.val1=2 ;
   } // end method processa
static public void main (String[] args) {
   Test mioTest =  new Test();
   mioTest.processa( mioTest.val, mioTest);
   System.out.println("val  " + mioTest.val);
   System.out.println("val1 " + mioTest.val1);
   } // end main
} // end class
-----------
Risulta che val = 0 e val1  = 2.
poiche' il metodo "processa" incrementa di uno il primo parametro che gli
viene passato, e nella invocazione del main il primo parametro e' val, come
mai me lo restitusice =0 invece che =1?
Grazie
B.

 come mai me lo restitusice =0 invece che =1?
perché t.val non è stata mai toccata.
Ciao
Matteo

 variabile che un attimo dopo non c'é più :).
e perche' invece val1 mantiene il valore 2 ?
puoi discutere cosa significa il fatto che la classe si chiama test e che il
metodo dentro la classe preveda un parametro appunto di tipo test? come fa
il metodo a sapere come trattare un test, se lui fa parte della descrizione
di test?
E' un casino, non riesco a entrare nella logica
Es. in java per lggere un file testo e metterlo in un array devo
1) fare una classe che definisce l'oggetto descritto dal file di testo
2) fare una classe che esegue astrattamente le procedure su tale oggetto
3) fare una classe che finalmente testa la classe astratta e le esegue
effettivamente
in basic me la cavo in 15 minuti di codice e qui sto a penare come un pazzo
su tre diversi sorgenti! boo!
B.

 effettivamente
File f = new File("C:\\x.txt");
FileReader fr = new FileReader(f);
BufferedReader br = new BufferedReader(fr);
Vector v = new Vector();
String s = br.readLine();
while (s != null) {
    v.addElement(s);
    s = br.readLine();
}
return v.toArray();
L'ho buttata là così ma non dovrebbe essere molto differente

 in basic me la cavo in 15 minuti di codice 
Allora in Java dovresti mettercene massimo 2.
Vedrai che troverai la programmazione in Java spaventosamente comoda e
veloce, soprattutto se avrai il piacere di imparare il C.
Spero che tutte queste righe siano servite.
Ciao
Matteo

 Spero che tutte queste righe siano servite.
Ora me le stampo e me le studio, ringrazio moltissmo te e tutti per il tempo
che mi avete dedicato. Se ho altri dubbi ve li faccio presente.
Il problema, al di la' della sintassi, e' che non mi e' ancora scatatto
dentro il meccanismo generale dell'approccio agli oggetti.
Ciao!
B.

 Stack cioé una pila)
Scusatemi se mi intrometto, ma volevo evitare di aprire un 3d inutilmente...
E' da poco che sto guardando java, e questa storia dello stack e dell'heap
nn l'ho proprio capita, anche perchè non so cosa sia una pila e tutto il
resto... E la mia domandina è: non è che magari conoscete un documento che
possa spiegarne bene la funzionalità e l'utilizzo di queste due cose (credo
che spiegarmelo qui sia un impresa titanica... :P), mi piacerebbe capire
bene il funzionamento della memoria!!
Grazie mille....

 queste due cose 
Non so se esiste. In effetti io ai tempi di fondamenti 1 avevo fatto qualche
struttura di dati ma ignoravo i dettagli sulla memoria.
Le pile sono una delle strutture di dati classiche insieme a liste, code e
alberi. Su questi trovi tonnellate di materiale. E se vuoi programmare è
indispensabile conoscerle.
Per quanto riguarda la memoria la questione è piu' complicata. Nel primo
capitolo di un buon libro sul C era ben spiegata la questione Stack-Heap e
allocazione statica-dinamica. Quindi suppongo che anche in qualche manuale
di Java sarà spiegato. Anche se Java non ti fa "pesare" l'allocazione
dinamica come il C e quindi puoi anche non sapere cosa succede quando crei
quasi magicamente nuovi oggetti. Cmq, conoscendo bene le regole di
visibilità si poteva risolvere l'esercizio di P.Bianchi (e in genere
programmare)senza tirare in ballo Stack-Heap. L'ho fatto perché credo che
capire cosa effettvamente succede sia estramente utile. Poi puoi anche
semplicemente imparare le regolette a memoria senza sapere da cosa
provengono. Se invece vai su un testo di sistemi operativi trovi anche
questioni molto piu' incasinate (ed interessanti) su paginazione,
segmentazione, memoria virtuale e via dicendo. Ma devi essere proprio di
buon umore per cominciare da quello :))
Ciao
Matteo

 essere proprio di buon umore per cominciare da quello :))
Ho trovato infatti un testo che parla di OS, ma è ancora un po presto per
leggerlo, data la mia preparazione ancora scarsa, ma dentro ci sono cose
splendide... Ma quando sarà il momento mi ci butterò sopra!
Grazie della spiegazione!