Java - Problema "Mostrar array desde otra clase con metodos"

 
Vista:
sin imagen de perfil
Val: 8
Ha aumentado su posición en 4 puestos en Java (en relación al último mes)
Gráfica de Java

Problema "Mostrar array desde otra clase con metodos"

Publicado por Francisco (4 intervenciones) el 22/03/2020 06:57:41
Hola comunidad!

Tengo problemas al mostrar el array desde otra clase con su respectivo método.
No se me muestran los Strings que coloco, acá va el código:



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
//PROGRAMA PRINCIPAL
public class EquiposalAzar {
 
   public static void main(String[] args) {
      int i;
 
        System.out.println("Ingrese los nombres: ");
 
        IngresarDatos ingreso = new IngresarDatos();
        ingreso.ingresarDatos();
        ingreso.mostrarDatos(); //Quiero mostrar los datos atraves de este metodo pero no funciona
 
 
}
}
 
 
 
//CLASE INGRESAR Y MOSTRAR DATOS EN ARRAY
import java.util.Scanner;
 
public class IngresarDatos {
 
     Scanner in = new Scanner(System.in);
     String nombre[] = new String[6];
    int i;
 
    public String ingresarDatos () { //Metodo para ingresar datos
       for (i=0; i<6; i++) {
       this.nombre[i] = in.nextLine();
       }
       return nombre[i];
    }
 
    public void mostrarDatos () { //Metodo para mostrar los datos pero parece que no es asi
 
        for (i=0; i<6; i++) {
        System.out.println(nombre[i]);
        }
    }
 
 
}


Quisiera saber en que estoy confundido o como solucionarlo, desde ya muchas gracias!
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
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Problema "Mostrar array desde otra clase con metodos"

Publicado por Kabuto (1381 intervenciones) el 22/03/2020 12:16:54
Hola.
Tu problema es que estás definiendo dos clases SEPARADAS en el mismo archivo .java.

Si quieres crearlas en el mismo archivo, una de las clases ha de estar ANIDADA dentro de la otra

Puesto que la clase EquiposalAzar es la principal, la clase IngresarDatos será la que esté anidada dentro. Esto es que se ha de definir dentro de las llaves de apertura y cierre de EquiposalAzar.
Y el import SIEMPRE ha de ir FUERA de las definiciones de las clases y al principio del documento, tras la línea del package.

Así ahora tendríamos una clase llamada EquiposalAzar, que dentro contiene un método main() y una clase anidada llamada IngresarDatos.
Esta es la estructura correcta:
1
2
3
4
5
6
7
8
9
public class EquiposalAzar {
 
   metodo main() {
   }
 
   clase IngresarDatos{
   }
 
}

Bien, sin embargo se presenta un problema. En tu código vas a crear un objeto IngresarDatos directamente dentro del método main().
El método main() es estático (static) pero la clase IngresarDatos no lo es, por lo tanto no vas a poder crear dicho objeto porque son ámbitos distintos.
La solución es declarar la clase EquiposAlAzar también como static y ahora sí podrás instanciar el objeto en el main() y correr el programa.

Ahora el programa se ejecuta pero hay otro error.
Tras ingresar datos se produce una excepción. El problema está en este método:

1
2
3
4
5
6
public String ingresarDatos () { //Metodo para ingresar datos
    for (i=0; i<6; i++) {
        this.nombre[i] = in.nextLine();
    }
    return nombre[i];
}
Ese último return, en ese punto la i tiene valor 6, un valor que sobrepasa las posiciones del array que van de 0 a 5 y por lo tanto se produce una excepción.

En realidad no creo que ese método necesite retornar nada, no se porque pusiste que retorna String. Se supone que solo ha de pedir datos y guardarlos en el array, ergo, el método puede ser declarado como void y no ha de retornar nada:
1
2
3
4
5
public void ingresarDatos () { //Metodo para ingresar datos
    for (i=0; i<6; i++) {
        this.nombre[i] = in.nextLine();
    }
}

El código, tras todas estas correcciones comentadas, podría quedar así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
package equiposAzar;
 
import java.util.Scanner;
 
public class EquiposalAzar {
 
	public static void main(String[] args) {
		System.out.println("Ingrese los nombres: ");
 
		IngresarDatos ingreso = new IngresarDatos();
		ingreso.ingresarDatos();
		ingreso.mostrarDatos();
 
	}
	//CLASE INGRESAR Y MOSTRAR DATOS EN ARRAY
 
	static class IngresarDatos { //Si queremos acceder directamente desde el main ha de ser static
 
		Scanner in = new Scanner(System.in);
		String nombre[] = new String[6];
		int i;
 
		public void ingresarDatos () { //Metodo para ingresar datos
			for (i=0; i<6; i++) {
				this.nombre[i] = in.nextLine();
			}
		}
 
		public void mostrarDatos () {
 
			for (i=0; i<6; i++) {
				System.out.println(nombre[i]);
			}
		}
	} //Fin de la clase IngresarDatos
} //Fin de clase EquiposalAzar
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Rodrigo
Val: 2.041
Plata
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Problema "Mostrar array desde otra clase con metodos"

Publicado por Rodrigo (623 intervenciones) el 22/03/2020 14:47:33
Es posible que el problema haya sido solamente la linea 32 del programa original (osea intentar acceder al elemento 6 del arreglo) y tener las 2 clases separadas es perfectamente posible.

Unas mejoras adicionales:

- Sugiero mejorar los nombres de las clases y metodos para que sea mas facil de entender. Ponerle IngresarDatos a la clase y a uno los metodos no es de lo mejor. Parece mejor usar un sustantivo como nombre de clase y un verbo como metodo. clase Nombres, metodo ingresar(). El otro metodo mostrar(). ("Datos" no describe mucho lo que hay al interior).
- La variable i es un indice. Borrala de ser un campo, ponla al interior de cada metodo.
- La variable Scanner in solo sirve para el metodo ingresar, muevela alli, no es (no parece ser) un campo tampoco
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar