Java - no me reconoce arreglo en dos metodos diferentes

 
Vista:

no me reconoce arreglo en dos metodos diferentes

Publicado por pedro gonzalez (1 intervención) el 17/03/2019 02:38:42
Hice dos metodos diferentes uno que se llama llenar y otro imprimir

declare el siguiente arreglo en mi metodo llenar y si guarda mis datos en los campos que le indico

String [][] tabla = new String [filas][7];

EL PROBLEMA es que al ejecutar el arreglo en el metodo de imprimir no me reconoce el arreglo, como si tuviera que declararlo otra vez en el metodo imprimir

en resumen en el primer metodo si ingresa datos a mi arreglo y en el otro metodo no me reconoce ese mismo arreglo para imprimir sus valores.


aaiiiuudaa por favor!!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 190
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

no me reconoce arreglo en dos metodos diferentes

Publicado por preguntas (70 intervenciones) el 17/03/2019 08:55:08
Si declaraste la variable dentro de un método, esta no es accesible desde otro método (solo si se pasa por parámetro).
Declara el arreglo a nivel de clase. Así puedes acceder desde cualquier método dentro de tu clase.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Kabuto
Val: 2.980
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

no me reconoce arreglo en dos metodos diferentes

Publicado por Kabuto (777 intervenciones) el 18/03/2019 02:01:44
Sí.
Como ha dicho el compañero, tienes un problema de "alcance" (scope).

Si declaras la tabla dentro de un método, esa tabla solo "existe" dentro de ese método.
Cuando el método haya terminado, dicha tabla "muere", deja de existir.

Tu ahora tendrás algo más o menos similar a esto:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class Tabla {
 
 
	public static void main(String[] args) {
		llenar();
		imprimir();
	}
 
	static void llenar() {
		//Pedir filas
		String [][] tabla = new String [filas][7];
		//Pedir datos para llenar tabla
	}
 
	static void imprimir() {
		for (int x = 0; x < tabla.length; x++)
			for (int j = 0; j < tabla[0].length; j++)
				System.out.println(tabla[x][j]);
	}
 
}

Aquí el método imprimir() se quejará de que no sabe nada de ningún elemento llamado "tabla", porque este elemento solo existe para el método llenar().

Si queremos que un elemento cualquiera sea accesible para distintos métodos, tal y como decía el compañero, lo ideal es declararlo a "nivel de clase".
De este modo, su "alcance" es global y cualquier método podrá trabajar con él.
Para hacer esto, basta con hacer la declaracion al principio de la clase.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class Tabla {
 
	static String [][] tabla; //Aqui declaramos la tabla
 
	public static void main(String[] args) {
		llenar();
		imprimir();
	}
 
	static void llenar() {
		//Pedir filas
		tabla = new String [filas][7]; //Aqui inicializamos la tabla
		//Pedir datos para llenar tabla
	}
 
	static void imprimir() {
		for (int x = 0; x < tabla.length; x++)
			for (int j = 0; j < tabla[0].length; j++)
				System.out.println(tabla[x][j]);
	}
 
}

En este caso, como no conocemos de antemano el numero de filas que va a tener, primero hacemos la declaración y luego en otro método donde el usuario (o quien sea) nos dirá el numero de filas, podremos hacer la inicialización.
El único cuidado que hay que tener es asegurarnos de que ningún método va a intentar leer datos de la tabla ANTES de que haya sido inicializada.

Es decir, ahora mismo el método imprimir() ya tiene acceso al elemento tabla. Pero si llamamos a imprimir(), antes de llamar a llenar() que es quien se encarga de inicializar la tabla, se producirá una excepción (probablemente NullPointerException) porque imprimir se encontrará con que tabla no está inicializada.

Así que hay que tener cuidado de que el primer método que acceda al elemento tabla, se encargue de inicializarla.


Y si fuera un caso donde ya sabemos de antemano el numero de filas que va a tener la tabla, entonces se podría hacer la inicialización al mismo tiempo que la declaracion:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class Tabla {
 
        //Declaramos e inicializamos al mismo tiempo
	static String [][] tabla = new String [12][7];
 
	public static void main(String[] args) {
		llenar();
		imprimir();
	}
 
	static void llenar() {
		//Pedir datos para llenar tabla
	}
 
	static void imprimir() {
		for (int x = 0; x < tabla.length; x++)
			for (int j = 0; j < tabla[0].length; j++)
				System.out.println(tabla[x][j]);
	}
 
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar