If-else trabajando, no cambie

Estoy haciendo una aplicación que tiene una cuadrícula de imágenes con texto y cada uno abre una actividad diferente. Funciona bien, pero sólo con fines de diseño Quiero reemplazar mis if-else statements con switch statements (que supongo que puedo hacer) sin embargo, no funciona. En este momento mi código de trabajo para establecer la etiqueta en cada imagen es:

 if(position == 0) textView.setText(R.string.zero); else if(position == 1) textView.setText(R.string.one); else if(position == 2) textView.setText(R.string.two); else if(position == 3) textView.setText(R.string.three); else if(position == 4) textView.setText(R.string.four); else if(position == 5) textView.setText(R.string.five); ect.... 

Quiero usar:

 switch(position) case 0: textView.setText(R.string.zero); case 1: textView.setText(R.string.one); case 2: textView.setText(R.string.two); case 3: textView.setText(R.string.three); case 4: textView.setText(R.string.four); 

Pero cuando hice ese sello era el último que definí (en mi ejemplo sería "cuatro"). También tengo un código similar para cada objeto para iniciar una intent diferente con la variable de position sin embargo que hace lo contrario y hace que cada intento igual a la primera. ¿Es incorrecta mi sintaxis o esto no funcionará para mi situación?

9 Solutions collect form web for “If-else trabajando, no cambie”

Necesitas break; Después de cada declaración en un case , de lo contrario la ejecución fluye hacia abajo (todos los casos por debajo de la que desea también se llamará), por lo que siempre obtendrá el último caso.

 switch(position) { case 0: textView.setText(R.string.zero); break; case 1: textView.setText(R.string.one); break; case 2: textView.setText(R.string.two); break; case 3: textView.setText(R.string.three); break; case 4: textView.setText(R.string.four); break; } 

Aquí está el tutorial oficial que explica cuándo y cuándo no usar break; .

Necesitas break; Después de cada rama:

 switch (position) { case 0: textView.setText(R.string.zero); break; // <-- here // etc } 

Los usos legítimos del switch cuando usted no break existen, ésos se llaman throughs del otoño; O porque return o throw .

 switch (someNumber) { case 0: return 0; // no need for break here case 1: throw new IllegalArgumentException(); // no need to break here case 2: System.out.println("Oh, I got two!"); // fall through case 3: return 3; default: System.out.println("Meh") // No need to break: last possible branch } return -1; 

Devolverá 3 incluso si ingresa 2.

Pero de lo contrario tiene que break .

Utilizar una instrucción break después de cada caso debe solucionar el problema. También usaría una declaración por defecto también después del último caso.

Esta es la solución. Necesita usar break para evitar pasar por cada caso:

 switch(position) case 0: textView.setText(R.string.zero); break; case 1: textView.setText(R.string.one); break; case 2: textView.setText(R.string.two); break; case 3: textView.setText(R.string.three); break; case 4: textView.setText(R.string.four); break; 

Yo recomendaría leer la documentación de Oracle sobre la instrucción switch .

Necesita usar break statement después de las operaciones de caso de eace. En una sentencia switch-case si no usas una sentencia break, entonces todos los casos después de ese específico serán ejecutados también

 case 0: textView.setText(R.string.zero); break; 

No te olvides de poner break; Después de cada caso: así:

 switch(position){ case 0: textView.setText(R.string.zero); break; case 1: textView.setText(R.string.one); break; case 2: textView.setText(R.string.two); break; case 3: textView.setText(R.string.three); break; case 4: textView.setText(R.string.four); break; } 

En las sentencias Switch-case , es necesario poner break; Después de cada caso .

 switch(position){ case 0: textView.setText(R.string.zero); break; case 1: textView.setText(R.string.one); break; case 2: textView.setText(R.string.two); break; case 3: textView.setText(R.string.three); break; case 4: textView.setText(R.string.four); break; default: System.out.println("not available"); } 

También hay que poner por defecto: al fin, porque cuando todos los casos están equivocados que el tiempo realice por defecto: acción.

En la sentencia switch-case no se olvidó de break; Y la acción predeterminada.

Cada instrucción break cierra la instrucción switch de inclusión. El flujo de control continúa con la primera instrucción después del bloque de interruptores. Las sentencias de interrupción son necesarias porque sin ellas, las sentencias en los bloques de conmutación caen: Todas las sentencias después de la etiqueta de caso coincidente se ejecutan en secuencia, independientemente de la expresión de las etiquetas de caso subsiguientes, hasta que se encuentre una sentencia break.

El conmutador es más rápido que if-else

Bottom line: El valor predeterminado es opcional (funciona como la sentencia else en el switch), Break es obligatorio.

Dato interesante: no verás ningún error de compilación, incluso si olvidaste de colocar la sentencia break.

El switch necesita una break en cada caso. Pero en su caso, podría hacerse mucho más simple mediante la definición de una matriz como se muestra a continuación.

 String values = {R.string.zero, R.string.one, R.string.two, ... }; 

Use esto para llenar textView: textView.setText(values[position]);

  • Cómo cambiar entre la cámara delantera y trasera cuando se utiliza MediaRecorder android
  • Actividad del conmutador androide de un hilo no ui
  • Android Studio no me deja usar el interruptor en una cadena?
  • ¿Cómo iniciar una actividad diferente usando la caja de conmutación en el elemento de menú?
  • Cómo cambiar entre actividades con viewflipper
  • Problema de conmutación: solo una opción visible
  • Cambiar las actividades de un lado a otro en Android
  • Switch case statement error: las expresiones case deben ser constantes
  • El texto de Android debe aparecer en ambos lados en el
  • Cambiar instrucción con cadena como argumento en Android
  • ¿Usando cuerdas en una caja de conmutación para un menú?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.