Java - Ayuda con un programa que pida los datos a un grupo indeterminado de alumnos

 
Vista:

Ayuda con un programa que pida los datos a un grupo indeterminado de alumnos

Publicado por Paola Edilia (1 intervención) el 27/08/2020 21:49:12
Hola! Gracias por leerme, llevo buen rato dándome tiros con este código y no logro hacerlo, estaria muy agradecida si alguien tuviera la disposición de ayudarme, no es mas que una tarea escolar, pero enserio he estado batallando mucho, esto es de lo que trata.
1. Hacer un programa que pida los datos a un grupo indeterminado de alumnos (matrícula, nombre y calificación final), los cuales serán guardados en un arreglo en la clase Oper_alumnos.
En el Principal habrá el siguiente menú de opciones:
1. Alta de alumno (pedir matrícula, nombre y calificación final)
2. Mostrar alumnos por nombre (pedir su nombre y mostrar todos sus datos – puede haber varios alumnos con el mismo nombre).
3. Mostrar datos de un alumno (pedir su matrícula y mostrar todos sus datos)
4. Promedio del grupo (calcular y mostrar promedio general)
5. Mejor alumno (muestra los datos del alumno o alumnos con la calificación mayor)
6. Salir
Notas:
1) En total habrá 3 clases: la Principal, Oper_alumnos y Alumno. La clase Oper_alumnos es la que contendrá el arreglo de alumnos y tendrá 5 métodos principales (alta, mostrar_nombre, mostrar_matricula, promedio y mejor).
2) Inicialmente el arreglo de alumnos tendrá un tamaño determinado (de preferencia 5), pero si son más alumnos, éste tendrá que cambiar (duplicar).

El problema es que en la clase Oper_Alumnos no funciona ni guno de mis metodos, solo el de alta, todos los demas me marcan la NuLLPointerException pero no entiendo en que momento me apunta a nulo.

CLASE ALUMNO

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package Asig6;
 
public class Alumno {
 
	String matri="";
	String nom="";
	double calif=0;
 
	public Alumno() {
 
		matri="";
		nom="";
		calif=0;
 
	}
 
}


CLASE Oper_Alumnos


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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
package Asig6;
import java.util.Scanner;
 
public class Oper_alumnos {
 
 
	Alumno n[];
	Alumno al;
 
	public Oper_alumnos(){
		n=new Alumno[10];
		al=new Alumno();
	}
 
	public void alta(String matri, String nom, double calif, int  i) {
 
		al.matri=matri;
		al.nom=nom;
		al.calif=calif;
		n[i]=al;
 
	}
 
	public void mostrar_nombre(String nom) {
 
		for (Alumno alumno : n) {
			if(alumno.nom == nom) {
				System.out.println(alumno.nom+"   "+alumno.matri+"   "+alumno.calif);
 
			}
		}
 
	}
 
	public void mostrar_matricula(String matri) {
 
		int a=0;
		for (int i = 0; i < n.length; i++) {
			if(n[i].matri == matri)
				System.out.println("Nombre: "+n[i].nom+"  Matricula: "+n[i].matri+"   Calificacion final: "+n[i].calif);
			else a++;
		}
		if(a==0)
			System.out.println("Matricula no encontrada");
	}
 
	public double promedio() {
 
		double suma=0;
		for (int i = 0; i < n.length; i++) {
			suma+=n[i].calif;
		}
		double prom=suma/n.length;
		return prom;
	}
 
	public void mejor() {
 
		double mejor=0;
		String nombre="";
		for (int i = 0; i < n.length; i++) {
			if(n[i].calif>mejor) {
				mejor=n[i].calif;
				nombre=n[i].nom;
			}
		}
 
		System.out.print(nombre+"   "+mejor);
 
	}
 
 
 
}



Clase Principal



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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
package Asig6;
import java.util.Scanner;
 
public class Principal {
 
	public static void main(String[] args) {
 
		Scanner leer=new Scanner(System.in);
		int n=0;
 
		do {
			System.out.println("1) Alta");
			System.out.println("2) Mostrar alumnos por nombre");
			System.out.println("3) Mostrar datos de un alumno");
			System.out.println("4) Promedio del grupo");
			System.out.println("5) Mejor alumno");
			System.out.println("6) Salir");
			System.out.println();
			System.out.print("Seleccione: ");
			n=leer.nextInt();
 
 
			String nom;
			String matri;
			int a=0;
 
			Oper_alumnos b=new Oper_alumnos();
			switch(n) {
			case 1:
 
				System.out.println("Ingrese la matricula: ");
				matri=leer.next();
				System.out.println("Ingrese el nombre: ");
				nom=leer.next();
				System.out.println("Ingrese la calificacion final: ");
				double calif=leer.nextDouble();
				b.alta(matri, nom, calif, a);
				a++;
				break;
			case 2:
				System.out.println("Ingrese el nombre: ");
				nom=leer.next();
				b.mostrar_nombre(nom);
				break;
			case 3:
				System.out.println("Ingrese la matricula: ");
				matri=leer.next();
				b.mostrar_matricula(matri);
				break;
			case 4:
				System.out.println("Promedio grupal: "+b.promedio());
				break;
			case 5:
				System.out.println("Mejor alumno: ");
				b.mejor();
				break;
			case 6:
				System.out.println("Gracias c: ");
				break;
			default:
				System.out.println("Ingrese una opcion valida");
			}
 
 
		}while(n!=6);
	}
 
}
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 Rodrigo
Val: 2.041
Plata
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Ayuda con un programa que pida los datos a un grupo indeterminado de alumnos

Publicado por Rodrigo (623 intervenciones) el 28/08/2020 00:08:05
Si tienes un arrreglo de 10 strings, pero no los has asignado, tienes un arreglo de 10 referencias a null, por lo que imprimirlos te va a generar un NullPointerException.

Para repararlo, te sugiero, o bien preguntar antes de usar algun miembro del alumno si la referencia es null, o bien llevar un contador de elementos asignados, si es que los asignas de manera incremental. De hecho, el metodo alta no deberia recibir el indice a usar, sino que la misma clase deberia tener cual es el primer elemento disponible. Ese indice parte en 0, y se incrementa cada vez que se invoca el metodo alta.
Este indice te puede servir luego para controlar el resto de los metodos para que no tengas el NullPointerException

Otra problema que veo es que comparas strings usando el operador ==. Los strings no se comparan con == se comparan con el metodo equals.
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 Sandro
Val: 392
Bronce
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Ayuda con un programa que pida los datos a un grupo indeterminado de alumnos

Publicado por Sandro (166 intervenciones) el 28/08/2020 01:02:28
en el principal cada vez que entras limpias el arreglo, muevo la linea 27 del principal fuera del do

y una vez que encuentres lo que buscas da le un break

saludos

en comparación de string's es .equals("sdfhfdsk!)
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