elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Ayuda no entiendo este ejercicio...?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda no entiendo este ejercicio...?  (Leído 2,773 veces)
Carlosjava

Desconectado Desconectado

Mensajes: 16


Ver Perfil
Ayuda no entiendo este ejercicio...?
« en: 25 Julio 2015, 13:56 pm »

Código
  1. public class TestClass {
  2.  
  3.    public static void main(String args[]) {
  4.        int i = 1;
  5.        int[] iArr = {1};
  6.        incr(i);
  7.        incr(iArr);
  8.        System.out.println("i = " + i + "  iArr[0] = " + iArr[0]);
  9.    }
  10.  
  11.    public static void incr(int n) {
  12.        n++;
  13.    }
  14.  
  15.    public static void incr(int[] n) {
  16.        n[0]++;
  17.    }
  18. }
  19.  
En la consola sale

 i = 1 iArr[0] = 2;

Porque no incrementa el i y si el iArr[0] ???


Mod: Los códigos deben ir en GeSHi


« Última modificación: 26 Julio 2015, 15:51 pm por engel lex » En línea

tebilon

Desconectado Desconectado

Mensajes: 32


Ver Perfil
Re: Ayuda no entiendo este ejercicio...?
« Respuesta #1 en: 25 Julio 2015, 14:13 pm »

Hola.
No soy un experto en Java, pero intentaré responderte.
En Java al pasar un tipo primitivo a un método se pasa el valor, lo que quiere decir, crero, que se creará una copia en otra dirección de memoria con el valor de la variable, por lo que hagas lo que hagas en el método no afectará a la variable. Sin embargo al pasar el array, lo que pasas realmente es su dirección de memoria, con lo que las modificaciones si que se hacen sobre el array.
Espero no haberte liado aún más.
Un saludo.


En línea

DarK_FirefoX


Desconectado Desconectado

Mensajes: 1.263


Be the change you wanna see in te world


Ver Perfil
Re: Ayuda no entiendo este ejercicio...?
« Respuesta #2 en: 25 Julio 2015, 17:23 pm »

- Por favor pon un título al tema que sea más descriptivo del problema.
- Utiliza las etiquetas GeSHi si vas a publicar código.



En java se pasa todo por valor, lo que hay que entender es que pasa los objetos por referencia, y esas referencias se pasan por valor.

Lee esto: http://stackoverflow.com/questions/40480/is-java-pass-by-reference-or-pass-by-value

Salu2s
En línea

Usuario Invitado


Desconectado Desconectado

Mensajes: 625



Ver Perfil
Re: Ayuda no entiendo este ejercicio...?
« Respuesta #3 en: 25 Julio 2015, 17:44 pm »

Como te han dicho, todo en Java se pasa por valor. Intentaré explicarlo de una forma for dummies ;)

Supongamos que tienes un objeto de tipo Leon:

Código
  1. Leon leon = new Leon("Simba");

¿Qué pasa internamente? Bien, la nueva instancia de León se almacena en una dirección de memoria, supongamos que en la dirección 57. Ahora, le pasamos el objeto leon al método editLeon:

Código
  1. public void editLeon(Leon leon) {
  2.    leon.setName("Oscar");
  3.    leon = new Leon("Mustafa");
  4. }

¿Qué está pasando internamente?

Lo que está pasando es que el método editLeon recibe un puntero apuntando a la dirección de memoria del objeto pasado. Entonces, por medio de este puntero podemos acceder al objeto y cambiar sus propiedades. En la siguiente línea, se crea una nueva instancia en la posición 125 por ejemplo, y el puntero cambia de dirección y ahora apunta a la dirección (125) de la nueva instancia. Java funciona igual que C en este aspecto.

Espero se haya entendido.
En línea

"La vida es muy peligrosa. No por las personas que hacen el mal, si no por las que se sientan a ver lo que pasa." Albert Einstein
daimagination

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Re: Ayuda no entiendo este ejercicio...?
« Respuesta #4 en: 30 Julio 2015, 01:40 am »

Código
  1. public class TestClass {
  2.  
  3.    public static void main(String args[]) {
  4.        int i = 1;
  5.        int[] iArr = {1}; //aca el array ocea la matriz aqui la matrix contiene solo un valor ya especificado. si tuviera [] [] seria un array biodimensional
  6.        incr(i);
  7.        incr(iArr);
  8.        System.out.println("i = " + i + "  iArr[0] = " + iArr[0]);//concatenizas aqui los diferentes valores de la matriz
  9.    }
  10.  
  11.    public static void incr(int n) {
  12.        n++;// aqui el static se usa para que los valores del constructor lo usen todos lo que quiero decir esque cada objeto usara las variables. en este caso es una variable que se comparte con todos los objetos.pa eso sirve static.
  13.    }
  14.  
  15.    public static void incr(int[] n) {
  16.        n[0]++;
  17.    }
  18. }
  19.  

Mod: Los códigos deben ir en etiquetas GeSHi
« Última modificación: 30 Julio 2015, 05:14 am por engel lex » En línea

DarK_FirefoX


Desconectado Desconectado

Mensajes: 1.263


Be the change you wanna see in te world


Ver Perfil
Re: Ayuda no entiendo este ejercicio...?
« Respuesta #5 en: 30 Julio 2015, 05:11 am »

@daimagination, utiliza las etiquetas GeSHi si vas a publicar código.

Además, ni siquiera utilizaste la manera correcta para hacer comentarios en Java.

Salu2s
« Última modificación: 30 Julio 2015, 05:13 am por DarK_FirefoX » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda con este ejercicio
Ejercicios
:ohk<any> 3 4,849 Último mensaje 2 Septiembre 2008, 06:17 am
por :ohk<any>
ayuda con este ejercicio
Java
xxxkroxxx 3 2,620 Último mensaje 13 Agosto 2009, 05:38 am
por Amerikano|Cls
por favor ayuda con este programa no entiendo como hacerlo
Programación C/C++
enrix507 1 2,030 Último mensaje 16 Julio 2014, 06:41 am
por engel lex
ayuda no entiendo como hacer este programa
Programación C/C++
ESTUDIANTEant 1 2,027 Último mensaje 15 Marzo 2015, 13:29 pm
por NOIS
No entiendo este error - Ayuda
Programación C/C++
Cero++ 5 1,817 Último mensaje 24 Diciembre 2018, 16:54 pm
por Cero++
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines