2012-06-06 8 views
5

¿Cómo puedo inicializar una matriz de enteros en Java de la siguiente manera: int[] array = {1,2,3}; dentro de una instrucción switch?Java: ¿cómo inicializar la matriz int en una caja de conmutadores?

Actualmente, puedo escribir:

switch(something) { 
    case 0: int[] array = {1,2,3}; break; 
    default: int[] array = {3,2,1}; 
} 

Pero cuando intento acceder a la variable array, eclipse se quejan de que no puede ser inicializado.

Si trato de declararlo como int[] array; o int[] array = new int[3]; y luego tengo la declaración de cambio, diría que estoy tratando de volver a declararlo.

¿Cómo puedo resolver este problema? La idea final es poder inicializar una matriz con 10 valores en una sola línea de código, en función de alguna lógica (una declaración de conmutación).

+0

Ver también: http://stackoverflow.com/questions/4104134/why-are-variables-not-local-in-case-statements –

Respuesta

14

Coloque la declaración antes de la instrucción de cambio. También necesitará crear una instancia explícita de una matriz del tipo correcto.

int[] array; 
switch (something) { 
    case 0: array = new int[] {1, 2, 3}; break; 
    default: array = new int[] {3, 2, 1}; 
} 
+0

¡Gracias! Lo siento si parecía una pregunta estúpida :) –

1

Le diría que coloque la declaración de matriz fuera del bloque de conmutadores, sin embargo, no puede usar la sintaxis = { 1, 2, 3} después de la declaración. Debe inicializarlo de la manera habitual, como en array = new int[] {1, 2, 3};

1
int[] array; 
switch (something) { 
    case 0: array = new int[]{1, 2, 3}; break; 
    default: array = new int[]{3, 2, 1}; 
} 
+0

Sí, gracias, pero Mark Byers fue el primero :) –

+0

¡Batir por menos de un minuto! Ah bueno. ¡Me alegra que hayas encontrado una solución! – GWilliams00

0

que tenían la misma pregunta antes. Espero que esto te ayude.

First Mark Byers tiene toda la razón. Java funciona con un alcance mínimo posible. entonces si intenta hacer

case 1: int arr = whatever and case 2 : int arr = ... le dará un error de re-declaración porque todo el interruptor se trata como un alcance único y no hay ningún caso sabio/basado en el alcance.

Punto 2: si usted dice:

case 1: int arr = whatever and case 2 : arr = ... asumiendo que int arr se compila y se toma del caso 1, entonces usted todavía está mal y de nuevo java le dará el error, basado en el principio de que each and every local var has to be declared and initialized before its use.

así que la mejor manera es declararlo fuera de su interruptor y definirlo o inicializarlo en el caso que prefiera.

Cuestiones relacionadas