Java - Duda

 
Vista:

Duda

Publicado por Dani (1 intervención) el 28/03/2024 18:49:51
Hola tengo un problema donde Desarrolle una aplicación visual que dados los nombres y las notas de un grupo de estudiantes de tercer año de la carrera Informática en la asignatura Estadística, otorgue una categoría a cada estudiante según la nota (E, B, R y M) y devuelva la siguiente información:
Listado de estudiantes con la categoría Excelente.
Listado con la cantidad de estudiantes por categoría.
Mi mayor duda es que tengo que mostrar esos listados en un JCombBox y no se cómo poner las condiciones en el código
Está es mi clase Public clases TEstudiantes{
String fnombre;
int fnota;
public TEstudiantes (){
fnombre='';
fnota=0;
}
public void setfnombre (String anombre){fnombre=anombre;}
public void setfnota (int anota){fnota=anota;}
public string getFnombre(){
return fnombre;}
public string getFnota(){
return fnota;}
public String Categoría (){
switch(nota);
case 5: return "Exelente";
break;
case 4: return "Bien";
break;
case 3: return "Regular";
break;
case 2: return "Mal";

Y tengo que realizarlo en el netbeans con lenguaje Java
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

Duda

Publicado por Kabuto (1383 intervenciones) el 29/03/2024 13:16:16
Hola Dani.

Te dejo un ejemplo muy sencillo para ya luego tú lo adaptes a tu código.

Utilizo tu misma clase TEstudiantes, con algunas correcciones y un cambio en el método que retorna la categoría según la nota, donde creo que será más sencillo si devuelve un simple char en lugar de un String.
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
public class TEstudiantes {
 
	private String fnombre;
	private int fnota;
 
	public TEstudiantes (){
		fnombre="";
		fnota=0;
	}
 
	public TEstudiantes(String nombre, int nota) {
		fnombre = nombre;
		fnota = nota;
	}
 
	public void setfnombre (String anombre){
		fnombre=anombre;
	}
 
	public void setfnota (int anota){
		fnota=anota;
	}
 
	public String getFnombre(){
		return fnombre;
	}
 
	public int getFnota(){
		return fnota;
	}
 
	public char Categoría(){
		switch(fnota) {
		case 5:
			return 'E';
		case 4:
			return 'B';
		case 3:
			return 'R';
		default: //Nota 2 o inferior
			return 'M';
		}
	}
}

Ahora en el programa principal, lo que hago es generar una lista predefinida de alumnos, con sus nombres y sus notas.
La interfaz, al ser un ejemplo, es muy simple, será simplemente dos JComboBox, uno con la lista de "alumnos excelentes" y otro con los conteos totales de alumnos para cada categoría.

Para conseguir los "alumnos excelentes", lo que hago es recorrer la lista de alumnos y preguntar quien tiene la categoria 'E'. Cuando encuentro uno que cumpla esa condición, guardo su nombre en un ArrayList que irá creciendo con cada alumno encontrado.

Al terminar, retorno los valores de ese ArrayList, pero en un arreglo primitivo ya que con él luego es más fácil construir el JComboBox.

Para conseguir los conteos por categoría es muy parecido.
Declaro cuatro contadores, uno por cada categoría y vuelvo a recorrer la lista de alumnos. Esta vez uso un switch para evaluar la categoría de cada alumno y decidir que contador he de incrementar.

Al terminar, construyo otro array primitivo con cadenas de texto para presentar los resultados de los cuatro contadores.


Estos dos procesos, el de obtener "alumnos excelentes" y los "conteos por categoría", los hago en dos métodos separados, los cuáles retornan cada uno los arreglos que necesito para construir los JComboBox.

Así, al generar la interfaz gráfica, los JComboBox ya disponen de los datos que han de mostrar.
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
import java.util.ArrayList;
 
import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
 
public class Listado extends JFrame {
 
	private TEstudiantes[] listaAlumnos;
	private JComboBox<Object> listaComboExcelentes;
	private JComboBox<Object> listaComboCategorias;
 
	public Listado() {
		//Creamos una lista predefinida de nombres y notas de alumnos
		generarListaAlumnos();
		//Creamos los JComboBox con los datos que corresponden a cada uno
		listaComboExcelentes = new JComboBox<Object>(generarListaExcelentes());
		listaComboCategorias = new JComboBox<Object>(generarListaCategorías());
 
		//Maquetamos la interfaz
		JPanel pnExcelentes = new JPanel();
		pnExcelentes.add(listaComboExcelentes);
		pnExcelentes.setBorder(BorderFactory.createCompoundBorder(
				BorderFactory.createTitledBorder("Alumnos Excelentes"),
				BorderFactory.createEmptyBorder(50, 100, 50, 100)));
 
		JPanel pnCategorias = new JPanel();
		pnCategorias.add(listaComboCategorias);
		pnCategorias.setBorder(BorderFactory.createCompoundBorder(
				BorderFactory.createTitledBorder("Cantidad por Categoria"),
				BorderFactory.createEmptyBorder(50, 100, 50, 100)));
 
		setLayout(new BoxLayout(getContentPane(), BoxLayout.Y_AXIS));
		add(pnExcelentes);
		add(pnCategorias);
 
		setTitle("Listado Excelentes");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		pack();
		setLocationRelativeTo(null);
		setVisible(true);
	}
 
	private void generarListaAlumnos() {
		listaAlumnos = new TEstudiantes[10];
		listaAlumnos[0] = new TEstudiantes("Andres Roman", 1);
		listaAlumnos[1] = new TEstudiantes("Laura Juan", 5);
		listaAlumnos[2] = new TEstudiantes("Javier Melero", 4);
		listaAlumnos[3] = new TEstudiantes("Sandra Lopez", 3);
		listaAlumnos[4] = new TEstudiantes("Silvia Aguado", 5);
		listaAlumnos[5] = new TEstudiantes("Carmen Robledo", 5);
		listaAlumnos[6] = new TEstudiantes("Luis Salvat", 2);
		listaAlumnos[7] = new TEstudiantes("Cristian Roldan", 4);
		listaAlumnos[8] = new TEstudiantes("Alicia Aloy", 0);
		listaAlumnos[9] = new TEstudiantes("Adolfo Siles", 5);
	}
 
	public Object[] generarListaExcelentes() {
 
		ArrayList<String> excelentes = new ArrayList<String>();
		//Recorremos lista de alumnos y buscamos los Excelentes
		for (TEstudiantes estudiante: listaAlumnos)
			if (estudiante.Categoría() == 'E')
				excelentes.add(estudiante.getFnombre());
 
		//Retornamos la lista de Excelentes
		return excelentes.toArray();
	}
 
	public Object[] generarListaCategorías() {
		//Contamos cuantos estudiantes hay para cada categoria
		int categoriaE = 0, categoriaB = 0, categoriaR = 0, categoriaM = 0;
		for (TEstudiantes estudiante: listaAlumnos)
			switch (estudiante.Categoría()) {
			case 'E':
				categoriaE++;
				break;
			case 'B':
				categoriaB++;
				break;
			case 'R':
				categoriaR++;
				break;
			case 'M':
				categoriaM++;
				break;
			}
		//Tras el conteo, creamos un array con los valores de cada categoría
		String[] categorias = new String[4];
		categorias[0] = "Excelente -> " + categoriaE + " alumnos";
		categorias[1] = "Bien -> " + categoriaB + " alumnos";
		categorias[2] = "Regular -> " + categoriaR + " alumnos";
		categorias[3] = "Mal -> " + categoriaM + " alumnos";
 
		return categorias;
	}
 
	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
			@Override
			public void run() {
				new Listado();
			}
		});
	}
 
}

Como digo es un ejemplo muy simple que puede servirte para adaptarlo a tu código.
Cualquier duda, solo has de preguntar.
Un saludo.




imagen_2024-03-29_131516389
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