Solucionado (ver solución)
Solucionado
(ver solución)
1
respuesta

[Duda] se puede declarar una variable 2 veces??

Hola Pudieran explicarme por favor porque si dicen que una variable no se puede declarar 2 veces en este código del prof, sí compila?

    if (cantidadPersonas> 1) { 
         boolean esPareja = true;
    }else {     
        boolean esPareja = false;
        
        
        Gracias! :)
1 respuesta
solución!

Cuando creas una variable dentro de un bloque, como una clase, un ciclo o una condicional, solo se puede utilizar dentro de ese bloque y hasta que el bloque se cierre. Básicamente, podrías crear otra variable posteriormente con el mismo nombre, ya sea en el código en general o dentro de otro bloque. A este concepto se le conoce como alcance de una variable o "scope". Cada vez que se abre y se cierra una llave { }, se crea un nuevo bloque, ya sea para definir un método, una clase, un ciclo o una condicional, entre otros.

En este ejemplo específico:

    if (condicion) { //Inicio  bloque 1
        boolean esPareja = true; 
    } //Fin bloque 1
    
    else { //Inicio bloque 2
        boolean esPareja = true;
    } //Fin bloque 2
    

Estas variables tienen los límites marcados anteriormente. Por lo tanto, si deseas imprimir el valor de la variable en los siguientes puntos:

//System.out.println(esPareja); (1) --> COMENTADO.  

    if (condicion) {
        boolean esPareja = true;
        System.out.println(esPareja); // (2)
    }
    
    else {
        boolean esPareja = false;
        System.out.println(esPareja); // (3)
    }

//System.out.println(esPareja); (4) --> COMENTADO.

El resultado obtenido sería el siguiente:

En un principio, si se escribe sin comentar las líneas 1 y 4 para imprimir, no se compilaría. Esto se debe a que en en estas lineas se hace referencia a una variable que no ha sido declarada, por lo tanto, no existe.

En la línea 2 se imprimiría "true", ya que previamente se ha declarado dentro del bloque 1 (if) una variable de tipo booleano con el valor true.

En la línea 3 se imprimiría "false", dado que se ha declarado previamente dentro del bloque 2 (else) una variable de tipo booleano llamada "esPareja" con el valor false. Es importante tener en cuenta que la variable que se imprime en esta línea no es la misma que la impresa en la línea 2. Aunque ambas variables tengan el mismo nombre, pertenecen a bloques diferentes. La primera variable se elimina al cerrar la llave del if.

Finalmente, la línea 4 no se podría ejecutar ni imprimir, ya que no se ha creado ninguna variable con ese alcance.

En conclusión, se puede declarar la variable dos veces, ya que la primera deja de existir antes de que se cree la segunda con el mismo nombre, y específicamente en este caso, solo una de las dos se usa, así que no se ingresa a la sentencia que no cumple la condición, por lo que no se crea la otra variable.

Sin embargo, si se quisiera hacer uso general de esta variable, debería haberse declarado de la siguiente manera:

boolean esPareja = false; //Es indistinto el valor asignado, en este caso false para ejemplificación.

System.out.println(esPareja); //Se imprime false.

    if (condicion) {
        esPareja = true;
        System.out.println(esPareja); //Se imprime true.
    }
    
    else {
        esPareja = false;
        System.out.println(esPareja); //Se imprime false.
    }

System.out.println(esPareja); //El valor que se asigna a la variable en el bloque que cumpla la condición, es ese valor el que se imprime.

Otras referencias que pueden ser útiles son las siguientes:

https://javadesdecero.es/basico/ambito-variables-scope/

https://www.asesoriaensig.com.mx/ocajp-7-java-basico-definir-el-alcance-de-las-variables/

https://www.youtube.com/watch?v=jmtW4XMpVRk