1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

ajuda em java

Discussão em 'Programação' iniciada por docpt, 17 de Dezembro de 2008. (Respostas: 7; Visualizações: 598)

  1. docpt

    docpt Power Member

    Ola boa noite.

    estou com duvidas em saber a diferença o significado do procedimento troca3 e troca4 quando estes são chamados

    Eis o seguinte excerto programa:

    Código:
    static void troca3(Inteiro u, Inteiro v) {
    Inteiro aux = u; u = v; v = aux;
    }
     
    static void troca4(Inteiro u, Inteiro v) {
    int aux = u.valor; u.valor = v.valor; v.valor = aux;
    }
     
    ...
     
    int x = 0, y = 2;
    troca1(x,y);
     
    int[] a = { 2, 3 };
    troca2(a,0,1);
     
    Inteiro u = new Inteiro(); u.valor = 5;
    Inteiro v = new Inteiro(); v.valor = 7;
    troca3(u,v);
    troca4(u,v);
    .......
    
    desde já obrigado
     
    Última edição pelo moderador: 17 de Dezembro de 2008
  2. docpt

    docpt Power Member

    vá lá pessoal, uma ajuda era bem vinda :)

    cumps
     
  3. petersaints

    petersaints Power Member

    Assim lido por alto e na diagonar... o troca3 troca a referência para os objectos. Ou seja, eles não são modificados apenas reatribuidos. O troca4 troca mesmo os valores!
     
  4. docpt

    docpt Power Member


    O troca4 então fica no fiinal u.valor=7 e v.valor=5;

    Agora no troca3 é que não percebo troca as referencias quer dizer que os valores ficam como estão mas a referencia é trocada.

    resumidamente é isto certo?

    obrigado
     
  5. napalm

    napalm Power Member

    Código:
    Inteiro u = new Inteiro(); u.valor = 5;
    Inteiro v = new Inteiro(); v.valor = 7;
    System.out.println(u); // ref1
    System.out.println(v); // ref2
    troca3(u,v);
    System.out.println(u); // ref2
    System.out.println(v); // ref1
    System.out.println(u.valor); // 7
    System.out.println(v.valor); // 5
    troca4(u,v);
    System.out.println(u); // ref2
    System.out.println(v); // ref1
    System.out.println(u.valor); // 5
    System.out.println(v.valor); // 7
    
    Nada como olhar para uns outputs.
     
    Última edição: 18 de Dezembro de 2008
  6. syqe

    syqe Power Member

    Sendo isto java, não vai imprimir as referências, e sim os valores para onde apontam (não sei se era essa a tua intenção, se não, sorry :P).

    Código:
    static void troca3(Inteiro u, Inteiro v) {
    Inteiro aux = u; u = v; v = aux;
    }
     
    static void troca4(Inteiro u, Inteiro v) {
    int aux = u.valor; u.valor = v.valor; v.valor = aux;
    }
    A diferença é que o troca3 tens 2 variáveis em memória e 3 apontadores.
    No inicio u aponta para mem1, v aponta para mem2; depois da função fica u aponta mem2 e v aponta para mem1, sem que os valores em memória tenham sido alterados, apenas os apontadores.

    Em troca4 tens 3 variáveis em memória e 3 apontadores.
    No inicio u aponta para mem1, v aponta para mem2, no decorrer da função é criada uma mem3 que assume o valor de mem1, o valor de mem1 é modificado para igual a mem2, e mem2 para mem3; depois da função u aponta para mem1 (mas já modificada), v aponta para mem2 (também modificada) e mem3 é descartada.

    Penso que o intuito desse exemplo é aprenderes a diferença entre modificar o valor e a referência das variáveis.

    (Para te contextualizares em Java todos os objectos são referências, logo quando fazes obj1 = obj2, estás apenas a igualar as referências, não os valores).

    Espero ter sido claro e que tenha ajudado.
     
  7. [C4]

    [C4] Power Member

    Imagina que Inteiro é uma mesa e Valor uma gaveta dessa mesa.
    Referencia é o onde essas mesas estao.
    Uma mesa esta na sala(referencia) e outra na cozinha(referencia).

    troca3 troca a sala(referencia) com a cozinha(referencia) mantendo as mesas(Inteiros) no mesmo sitio. Quando entramos agora na cozinha(referencia), temos la a mesa(Inteiro) da antiga sala(referencia) com a respectiva gaveta(Valor). Quando entramos na nova sala(referencia), temos la a mesa(Inteiro) da antiga cozinha(referencia) com a respectiva gaveta(Valor).

    troca4 troca apenas as gavetas(Valores) das mesas(Inteiros), mantendo a sala e cozinha(referencias). A mesa(Inteiro) da sala(referencia) mantem-se na sala, mas com a gaveta(Valor) da mesa da cozinha(referencia). A mesa da cozinha(referencia) mantem-se na cozinha(referencia), mas com a gaveta(Valor) da mesa(Inteiro) da sala(referencia).


    Espero nao ter complicado mais.... :)
     
  8. docpt

    docpt Power Member



    Obrigado, percebido muito obrigado mesmo..
     

Partilhar esta Página