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

    [java] risultato che non capisco..

    class LegameParametri1{

    public static void alfa (int a, int x) {
    System.out.println("2: a vale " + a + ", x vale " + x);
    a = a + 3;
    x = x - 3;
    System.out.println("3: a vale " + a + ", x vale " + x);
    }
    public static void main(String[] args) {
    int a,b;
    a=4;
    b=7;
    System.out.println("1: a vale " + a + ", b vale " + b);
    alfa(a,b);
    System.out.println("4: a vale " + a + ", b vale " + b);

    }}


    da questo codice viene fuori questo

    1: a vale 4 , b vale 7
    2: a vale 4 , x vale 7
    3: a vale 7 , x vale 4
    4: a vale 4 , b vale 7

    non capisco come x possa valere 7 al punto 2...
    da dove prende quel valore ?
    e poi vedo che il metodo alfa non influisce su quello main, giusto ?

  2. #2
    Ma scusa, tu gli passi a (che è uguale a 4) e b (che è uguale a 7) nelle variabili locali a e x... è logico il risultato!

    cmq non influisce sul main.

    ti ricordi quando da piccoli andavamo in treno? io mettevo il culo fuori dal finestrino e tu la faccia e tutti ci chiedevano se eravamo gemelli...

  3. #3
    immaginavo che la x prendesse il valore da b ma non pensavo fosse così diretto... pensavo che era necessario dargli un valore xchè non compariva in main... mah
    ho ancora parecchio da studiare

  4. #4
    x è una variabile dichiarata nella funzione, indipendente dal main... b è una variabile dichiarata nel main a cui hai associato un valore... tu hai eseguito un passaggio di valore dalla variabile locale del main alla variabile locale della funzione... più diretta di così... ... a quel punto x assume il valore contenuto nella variabile b...

    ti ricordi quando da piccoli andavamo in treno? io mettevo il culo fuori dal finestrino e tu la faccia e tutti ci chiedevano se eravamo gemelli...

  5. #5

    capito..
    scrivendo invece
    alfa (b,a);
    alla a di alfa do b, e alla x do a..
    :gren:
    molte grazie !

  6. #6
    Originariamente inviato da fallen

    capito..
    scrivendo invece
    alfa (b,a);
    alla a di alfa do b, e alla x do a..
    :gren:
    molte grazie !
    esatto... :metallica

    ti ricordi quando da piccoli andavamo in treno? io mettevo il culo fuori dal finestrino e tu la faccia e tutti ci chiedevano se eravamo gemelli...

  7. #7
    Nel main:
    imposti a=4 e b=7 e stampi (1 - a=4, b=7)
    poi chiami alfa(a,b)

    In alfa:
    vengono allocate in memoria DUE NUOVE variabili, a e x.
    Ad a viene assegnato il valore di a. (Anche se omonime sono due variabili diverse!!!)
    Ad x viene assegnato il valore di b.
    stampi (2 - a=4, x=7)

    a = a + 3; Ad a assegni il valore 4+3, cioé 7
    x = x - 3; A x assegni il valore 7-3, cioé 4
    stampi (3- a=7, x=4)

    Nel main:
    stampi (4 - a=4, b=7)
    a e b hanno mantenuto il loro valore originale perchè non sono mai state modificate!
    Quando le hai passate al metodo alfa() non hai passato le variabili a e b ma il loro valore!!!!

    ATTENZIONE!!!
    Questo comportamento vale solo per i tipi dati 'primitivi' (int, short, long, ecc..) perché non sono oggetti.

    Per gli oggetti (istanze di classe) il discorso cambia...
    Prova questo pezzo di codice:

    /** incapsula un tipo di dato primitivo (valore) dentro una classe */
    Class X {
    int valore = 0;
    public int getValore() { return valore; }
    public void setValore(int v) { valore = v; }
    public void somma(int s) { valore += s; }
    }

    /** classe di lancio (main) */
    Class Y {
    public static void main(String[] args) {

    int a = 4;

    X b = new X();
    b.setValore(7);

    System.out.println("1 - a="+a+", b="+b.getValore());
    alfa(a, b);
    System.out.println("4 - a="+a+", b="+b.getValore());
    }

    public static void alfa(int a, X x) {
    System.out.println("2 - a="+a+", x="+x.getValore());
    a += 3; // equivalente: a = a + 3
    x.somma(-3); // fac-simile di x = x - 3 ma con l'uso del metodo somma
    System.out.println("3 - a="+a+", x="+x.getValore());
    }

    }

    Risultato:
    1 - a=4, b=7
    2 - a=4, x=7
    3 - a=7, x=4
    4 - a=4, b=4 b è cambiato mentre a no!!!

    Spero di essere stato chiaro...
    Ciao

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.