| 
	
		|  Autor | Tema: Duda ejercicio java variable static  (Leído 3,295 veces) |  
	| 
			| 
					
						| beginner6 
								
								 Desconectado 
								Mensajes: 3
								
								
								
								
								
								   | 
 
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: 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 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 
								Mensajes: 394
								
								   | 
 
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: class Prueba {static int c = 5;public static int f (int x) {     x = 0;     return x;}public static void main (String []  args) {  System.out .println("Resultado = " +  f( c) + "," + ++ c);}}
 
 |  
						| 
								|  |  
								| « Ú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 
								Mensajes: 250
								
								   | 
 
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 
								Mensajes: 3
								
								
								
								
								
								   | 
 
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 
								Mensajes: 394
								
								   | 
 
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 
								Mensajes: 3
								
								
								
								
								
								   | 
 
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    Ahora sí está entendido, gracias mil!! |  
						| 
								|  |  
								|  |  En línea | 
 
 |  |  |  |  |  
 
	
 
 
				
					
						| Mensajes similares |  
						|  | Asunto | Iniciado por | Respuestas | Vistas | Último mensaje |  
						|   |   | ejercicio java duda Ejercicios
 | LakroMC | 1 | 5,878 |  2 Noviembre 2009, 20:58 pm por leogtz
 |  
						|   |   | Duda con ejercicio de Java en Netbeans! Java
 | KlaHavoK | 8 | 25,008 |  6 Enero 2019, 10:29 am por rub'n
 |  
						|   |   | Duda ejercicio java Ordenación de Vectores Java
 | Thryks | 6 | 4,538 |  14 Marzo 2014, 11:51 am por Thryks
 |  
						|   |   | Duda Ejercicio Java Aula Mentor Java
 | Guilior | 0 | 2,070 |  13 Mayo 2015, 01:17 am por Guilior
 |  
						|   |   | funcion que devuelve un puntero de una variable static Programación C/C++
 | fafafa01 | 8 | 4,554 |  24 Enero 2017, 23:28 pm por MAFUS
 |    |