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]);

  • Android: cambia a la actividad sin reiniciarla
  • Android Cambiar entre actividades
  • Obtener la intensidad de la señal de WIFI y datos móviles
  • Para eventos de Android, ¿por qué las sentencias switch son más comunes que if-else?
  • Cómo cambiar entre actividades con viewflipper
  • Cómo cambiar el color de entrada del imput en xml?
  • Cambiar instrucción con cadena como argumento en Android
  • Cobertura de Jacoco para la declaración de switch
  • Actividad del conmutador androide de un hilo no ui
  • El texto de Android debe aparecer en ambos lados en el
  • Un problema Java de conmutación: las expresiones de caso deben ser expresiones constantes
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.