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

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Duda ejercicio java variable static
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Duda ejercicio java variable static  (Leído 3,004 veces)
beginner6

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Duda ejercicio java variable static
« en: 10 Noviembre 2014, 22:56 pm »

Hola, me he encontrado este ejercicio que no entiendo, en el libro vienen las soluciones pero no la explicación, y como estoy aprendiendo por mi cuenta no tengo quien me lo explique:

Código:
class Prueba {
static int x = 5
public static int f() {
     x = 0
     return x;
}
public static void main (String [] args {
  System.out.println("Resultado = " + f() + "," + (++x));
}
}

Resultado = 0,1


Código:
class Prueba {
static int x = 5
public static int f (int x) {
     x = 0
     return x;
}
public static void main (String [] args {
  System.out.println("Resultado = " + f(x) + "," + ++x);
}
}

Y aquí imprime:
Resultado = 0, 6


Veo que en el segundo la función f toma x como parámetro, pero no entiendo porqué eso hace que x vuelva a valer 5 si el último valor que se le había dado era 0. ¿Alguien me lo podría explicar?

De antemano muchas gracias y saludos!!


En línea

JonaLamper


Desconectado Desconectado

Mensajes: 394



Ver Perfil
Re: Duda ejercicio java variable static
« Respuesta #1 en: 10 Noviembre 2014, 23:31 pm »

Sí, pero cuando estás haciendo el System.out.println(f(x)); estás haciendo referencia a tu x del método, y según tu método, esa x retorna el valor que tiene (que es 0, pues se lo has asignado dentro del método). Pero cuando haces System.out.println(x); estás haciendo referencia a tu atributo estático que vale 5.

Quizá con nombres distintos lo veas mejor, mira:

Código
  1. class Prueba {
  2. static int c = 5;
  3. public static int f (int x) {
  4.     x = 0;
  5.     return x;
  6. }
  7. public static void main (String [] args) {
  8.  System.out.println("Resultado = " + f(c) + "," + ++c);
  9. }
  10. }


« Última modificación: 10 Noviembre 2014, 23:34 pm por JonaLamper » En línea

Utilizar palabras para hablar de palabras es como utilizar un lápiz para hacer un dibujo de ese lápiz sobre el mismo lápiz.
someRandomCode

Desconectado Desconectado

Mensajes: 250



Ver Perfil
Re: Duda ejercicio java variable static
« Respuesta #2 en: 10 Noviembre 2014, 23:32 pm »

Exactamente como te han dicho, solo aportar que para acceder a la x estatica tendrias que usar this->x, dado que de otra forma el x de la funcion tiene precedencia
En línea

beginner6

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Re: Duda ejercicio java variable static
« Respuesta #3 en: 11 Noviembre 2014, 00:15 am »

Pero cuando haces System.out.println(x); estás haciendo referencia a tu atributo estático que vale 5.
Entendido, ¿y por qué no hace lo mismo el código de arriba?

En el primer código, no sé si es que imprime la x del método, o imprime la static que ha cambiado de valor (y si fuera así no entiendo porqué en el primero cambia de valor y en el segundo hay "otra" x independiente), según leí las variables estáticas solo pueden tener un valor, no es como las otras que se pasa una copia a cada método... Pero qué distinto es estudiar la teoría y luego ver la práctica... Muchísimas gracias por vuestro tiempo y respuestas :)

En línea

JonaLamper


Desconectado Desconectado

Mensajes: 394



Ver Perfil
Re: Duda ejercicio java variable static
« Respuesta #4 en: 11 Noviembre 2014, 09:01 am »

Porque en el primer código solo existe una x, la del static (que su valor es 5). Entonces esa x entra en el método y la modificas poniéndola a 0. Y en el segundo código tienes dos x. La primera es la del static y la segunda es el parámetro que recibe tu método.

Por eso no es buena idea poner los mismos nombres a los atributos que a las variables.

Y como creo que se lo que vas a preguntar ahora, te lo responderé. El segundo código hace lo siguiente (en mi código):

1.- c = 5 (estático).
2.- Al imprimir System.out.println(f(c)); el método recibe un 5 como parámetro de entrada, que se lo copia a la variable x.
3.- la variable x la pones a 0. Y ese es el valor que te muestra (pero el atributo estático c no ha cambiado su valor!)
« Última modificación: 11 Noviembre 2014, 09:08 am por JonaLamper » En línea

Utilizar palabras para hablar de palabras es como utilizar un lápiz para hacer un dibujo de ese lápiz sobre el mismo lápiz.
beginner6

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Re: Duda ejercicio java variable static
« Respuesta #5 en: 11 Noviembre 2014, 18:09 pm »

Por eso no es buena idea poner los mismos nombres a los atributos que a las variables.
Ya ves, lo han puesto así para pillar jeje  :laugh:

Ahora sí está entendido, gracias mil!!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
ejercicio java duda
Ejercicios
LakroMC 1 5,515 Último mensaje 2 Noviembre 2009, 20:58 pm
por leogtz
Duda con ejercicio de Java en Netbeans!
Java
KlaHavoK 8 24,158 Último mensaje 6 Enero 2019, 10:29 am
por rub'n
Duda ejercicio java Ordenación de Vectores
Java
Thryks 6 4,166 Último mensaje 14 Marzo 2014, 11:51 am
por Thryks
Duda Ejercicio Java Aula Mentor
Java
Guilior 0 1,940 Último mensaje 13 Mayo 2015, 01:17 am
por Guilior
funcion que devuelve un puntero de una variable static
Programación C/C++
fafafa01 8 3,994 Último mensaje 24 Enero 2017, 23:28 pm
por MAFUS
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines