Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

241
Vistas
Alcance de las variables dentro de la declaración de cambio de caso en Java

Tengo el siguiente código, mi pregunta es cómo podemos conservar el valor de String A y B y usarlo en otra declaración de caso para compararlo.

 String A = null; String B = null; Switch(key) { case “ABC”: A = “Hello”; break; case “XYZ”: B = “Hi”; break; case “compare”: A.equals(B); //Exception here as A and B are nulls.

¿Puede alguien guiarme aquí, ya que estoy realmente confundido con el alcance variable en el caso del interruptor?

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

El problema que tiene no está relacionado con la vida útil del bloque de la caja del interruptor o los objetos A y B El método String.equals() una NullPointerException porque está asignando valores null a los objetos A y B . Si desea que los objetos String no reciban este error, inicialice los objetos String para que queden vacíos; por ejemplo String city = ""; . Si desea que los objetos A o B se comparen después de asignar un valor y que el programa se redirija a otro control, puede revisar el ejemplo a continuación. Si hay un problema diferente, intente explicar el problema dibujando un diagrama de flujo.

 public class HelloWorld { public static boolean Compare(String s1, String s2) { if(s1.equals(s2)) return true; return false; } public static void main(String []args) { String A = "", B = "Hello", key = "ABC"; switch(key) { case "ABC": /* assignment and comparison */ A = "Hello"; if(Compare(A, B)) { /* program can be directed according to the situation. */} else { /* program can be directed according to the situation. */} break; case "XYZ": /* assignment and comparison */ B = "Hi"; if(Compare(A, B)) { /* program can be directed according to the situation. */} else { /* program can be directed according to the situation. */} break; case "compare": /* just comparison */ if(Compare(A, B)) { /* program can be directed according to the situation. */} else { /* program can be directed according to the situation. */} break; } System.out.printf("A: %s B: %s", A, B); } }
over 4 years ago · Santiago Trujillo Denunciar

0

En su declaración de Switch-case, está comparando lo que está en clave con los diferentes casos , procediendo de la siguiente manera:

  • ¿La clave es igual a "ABC"? entonces A = "Hola"

  • ¿La clave es igual a "XYZ"? entonces B = "Hola"

  • ¿La clave es igual a "comparar"? luego compare A y B (que hasta ahora son nulos)

Tenga en cuenta que si su código llega a la última declaración de caso, significa que omitió los otros dos, por lo que A y B son nulos. Además, su código asume que la clave tendrá los siguientes valores posibles: "ABC", "XYZ" o "comparar", y si la clave no tiene ninguno de esos valores, su programa no hará nada.

over 4 years ago · Santiago Trujillo Denunciar

0

¿Puede alguien guiarme aquí, ya que estoy realmente confundido con el alcance variable en el caso del interruptor?

Los siguientes son para una declaración de switch clásica (Java 11 o anterior).

  • Las variables declaradas fuera del bloque de cambio están "dentro del alcance" dentro del bloque de cambio.

  • Las variables declaradas dentro del bloque de cambio están "dentro del alcance" dentro del bloque de cambio. El ámbito comienza en el punto de la declaración y continúa durante el resto del bloque de cambio.

    Por lo tanto, una variable declarada en un caso estará dentro del alcance de los siguientes casos si los casos "caen".

Entonces, en su ejemplo, A y B están en el alcance antes del switch , dentro del switch y después de él. Pero si se declararan dentro del switch , no estarían dentro del alcance después del switch .


La inicialización de variables declaradas dentro de un switch se rige por las reglas normales. Los inicializadores explícitos se ejecutan cuando se encuentra la declaración, y las variables deben inicializarse definitivamente antes de usarlas.

 switch (num) { case 1: int a = 1; // No break ... case 2: System.out.println(a); // ERROR - not definitely initialized. } System.out.println(a); // ERROR - not in scope.

En lo anterior, a está dentro del alcance en el segundo caso de cambio, pero no se inicializará en todas las rutas a su instrucción println .


Como señala @Sercan, el motivo de su NPE no tiene nada que ver con los ámbitos o la inicialización definitiva. El problema real es que la ruta de ejecución que toma su código en el caso de "compare" no asigna un valor no nulo a A . (O B tampoco. Pero la no nulidad de B no debería causar una NPE).

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda