crear un arreglo dentro de otro
Por favor me podrian decir como creo un arreglo dentro de otro, es que he tartado y nada que puedo.
Lo que necesito es que por ejemplo si se crea un arreglo estudiante al ingresar un estudiante se cree un arreglo para guardar las materias que el matricula con sus notas. Lo intente pero al guardar los datos de materias se guardan en un solo arreglo.
Es lo unico que me falta para terminar mi ejercicio, les agradezco de antemano.
- Inicie sesión o regístrese para enviar comentarios
Puedes hacer que tu
Puedes hacer que tu estudiante tenga un arreglo:
private String [] materias = new String[10];
private int indice = 0;
public void addMateria( String materia ) {
materias[indice++] = materia;
}
}
Y luego agregarlas ahí:
Estudiante[] estudiantes = ....
for( Estudiante e : estudiantes ) {
e.addMateria( m );
}
Mejor sería usar una lista ( List ) porque que esta crece dinámicamente y el arreglo es fijo.
Que es lo que llevas?
utilizo botones para manejar
Todo el codigo seria así:
import java.awt.*;
import java.awt.event.*;
import java.util.*;
public class grafica extends JFrame {
JTextField nomf,apel1f,apel2f,direcf,telf,idf,codf,ato;
JLabel nomb, apel1b,apel2b,direcb,telb,idb,codb,nuev,matric,curs,tit,estud,matricula,aton,mostrar;
JButton agre,nuevo, matricular,resultado,matricul,mostrara;
JComboBox materia,estudiante;
JFrame men, matr;
Vector materias=new Vector();
Vector estudiantes=new Vector();
int ident, n, i = -1,u = -1;
String nom, apel1, apel2, dir, tel, cod,identificar;
estudiante []est;
int matera, estudiant;
float ut;
String mno;
int miden;
float mnot;
public grafica() {
estudiantes();
JFrame menus = new JFrame();
menus.setTitle("Menu");
menus.setSize(260,190);
menus.setVisible(true);
menus.setLocationRelativeTo(null);
menus.setResizable(false);
menus.setDefaultCloseOperation(EXIT_ON_CLOSE);
nuevo = new JButton("Estudiante");
nuevo.setBounds(140,40,100,27);
menus.getContentPane().add(nuevo);
mostrara= new JButton("Mostrar");
mostrara.setBounds(140,80,100,27);
menus.getContentPane().add(mostrara);
resultado = new JButton("Resultado");
resultado.setBounds(140,120,100,27);
menus.getContentPane().add(resultado);
nuev = new JLabel("Nuevo Estudiante");
nuev.setBounds(20,40,100,27);
menus.getContentPane().add(nuev);
matric = new JLabel("Mostrar");
matric.setBounds(20,80,100,27);
menus.getContentPane().add(matric);
curs = new JLabel("Resultado");
curs.setBounds(20,120,100,27);
menus.getContentPane().add(curs);
tit = new JLabel("");
tit.setBounds(10,10,100,27);
menus.getContentPane().add(tit);
tit.setFont(new java.awt.Font("Tahoma", 1, 20));
est = new estudiante[n];
nuevo.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent xy){
try{
forestudian();
}
catch(Exception e){
e.printStackTrace();
}
}
});
mostrara.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent xy){
try{
for(int yu=0;yu<n;yu++){
for(int to=0;to<=2;to++){
mno=est[yu].nb;
miden=est[yu].id;
mnot=est[yu].mat[to].notae;
System.out.println("nombre"+mno+"identificacion"+miden+"nota"+mnot);
}
}
}
catch(Exception e){
e.printStackTrace();
}
}
});
resultado.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent xy){
try{
datos();
}
catch(Exception e){
e.printStackTrace();
}
}
});
}
public void forestudian(){
setTitle("Estudiante");
setSize(250,300);
getContentPane().setLayout(null);
setLocationRelativeTo(null);
setResizable(false);
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
agre = new JButton("Agregar");
agre.setBounds(120,230,100,27);
getContentPane().add(agre);
nomf = new JTextField();
nomf.setBounds (120,20,100,27);
getContentPane().add(nomf);
apel1f = new JTextField();
apel1f.setBounds(120,50,100,27);
getContentPane().add(apel1f);
apel2f = new JTextField();
apel2f.setBounds(120,80,100,27);
getContentPane().add(apel2f);
direcf = new JTextField();
direcf.setBounds (120,110,100,27);
getContentPane().add(direcf);
telf = new JTextField();
telf.setBounds(120,140,100,27);
getContentPane().add(telf);
idf = new JTextField();
idf.setBounds(120,170,100,27);
getContentPane().add(idf);
codf = new JTextField();
codf.setBounds(120,200,100,27);
getContentPane().add(codf);
nomb = new JLabel("Nombre");
nomb.setBounds(15,20,100,27);
getContentPane().add(nomb);
apel1b = new JLabel("Primer Apellido");
apel1b.setBounds(15,50,100,27);
getContentPane().add(apel1b);
apel2b = new JLabel("Segundo Apellido");
apel2b.setBounds(15,80,100,27);
getContentPane().add(apel2b);
direcb = new JLabel("Dirrección");
direcb.setBounds(15,110,100,27);
getContentPane().add(direcb);
telb = new JLabel("Telefono");
telb.setBounds(15,140,100,27);
getContentPane().add(telb);
idb = new JLabel("Identificación");
idb.setBounds(15,170,100,27);
getContentPane().add(idb);
codb = new JLabel("Codigo");
codb.setBounds(15,200,100,27);
getContentPane().add(codb);
setVisible(true);
agre.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent xy){
try{
i++;
u++;
nom = nomf.getText();
apel1 = apel1f.getText();
apel2 = apel2f.getText();
dir = direcf.getText();
tel = telf.getText();
identificar = idf.getText();
ident = Integer.parseInt(idf.getText());
cod = codf.getText();
est[i]=new estudiante(ident,nom,apel1,apel2,dir,tel,cod);
JOptionPane.showMessageDialog(null,"El estudiante ha sido registrado","Registro exitoso",JOptionPane.WARNING_MESSAGE);
nomf.setText("");
apel1f.setText("");
apel2f.setText("");
direcf.setText("");
telf.setText("");
idf.setText("");
codf.setText("");
matricular();
datosmat();
}
catch(Exception e){
e.printStackTrace();
}
}
});
}
public void matricular(){
JFrame matr = new JFrame();
matr.setTitle("Matricular");
matr.setSize(250,250);
matr.getContentPane().setLayout(null);
matr.setLocationRelativeTo(null);
matr.setResizable(false);
matr.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
matricul = new JButton("Matricular");
matricul.setBounds(80,180,100,27);
matr.getContentPane().add(matricul);
materia = new JComboBox(materias);
materia.setBounds (120,20,100,27);
matr.getContentPane().add(materia);
ato = new JTextField ();
ato.setBounds(120,80,100,27);
matr.getContentPane().add(ato);
estud = new JLabel("Estudiante");
estud.setBounds(15,50,100,27);
matr.getContentPane().add(estud);
matricula = new JLabel("Materia");
matricula.setBounds(15,20,100,27);
matr.getContentPane().add(matricula);
aton = new JLabel("Nota");
aton.setBounds(15,80,100,27);
matr.getContentPane().add(aton);
mostrar = new JLabel(identificar);
mostrar.setBounds(120,50,100,27);
matr.getContentPane().add(mostrar);
matr.setVisible(true);
matricul.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent xy){
try{
matera = materia.getSelectedIndex();
estudiant = Integer.parseInt(mostrar.getText());
ut = Float.parseFloat(ato.getText());
est[i].mat[u] = new matricula(matera,estudiant,ut);
JOptionPane.showMessageDialog(null,"El estudiante ha sido matriculado","Matricula exitosa",JOptionPane.WARNING_MESSAGE);
matricular();
}
catch(NumberFormatException e){
JOptionPane.showMessageDialog(null,"El estudiante ya tiene sus 5 materias matriculadas","Materias ya etsan matriculadas",JOptionPane.WARNING_MESSAGE);
}
catch(Exception e){
e.printStackTrace();
}
}
});
}
public void datosmat(){
int mate;
for(mate=101;mate<111 ;mate++){
materias.add(mate);
}
}
public void estudiantes(){
n = Integer.parseInt(JOptionPane.showInputDialog(null,"Ingrese numero de estudiantes","NUMERO DE ESTUDIANTES",JOptionPane.OK_CANCEL_OPTION));
}
public void datos(){
float baja = 6,matba,notestu,notestup=0,notcurso=0,notcursop;
int mcurso,cont=0,conta=0;
for(int yu = 0 ; yu <= n ; yu++){
notestu=0;
cont=0;
for(int to = 0 ; to <= 0 ; to++){
mno=est[yu].nb;
miden=est[yu].id;
mnot=est[yu].mat[to].notae;
mcurso=est[yu].mat[to].idcur;
if(baja < mnot){
matba = mcurso;
if(matba == 101){
System.out.println("La materia mas baja es Matematicas");
}
else if(matba == 102){
System.out.println("La materia mas baja es Algebra");
}
else if(matba == 103){
System.out.println("La materia mas baja es Desarrollo Humano");
}
else if(matba == 104){
System.out.println("La materia mas baja es Analisis");
}
else if(matba == 105){
System.out.println("La materia mas baja es Programación");
}
else if(matba == 106){
System.out.println("La materia mas baja es Logica");
}
else if(matba == 107){
System.out.println("La materia mas baja es Modelos");
}
else if(matba == 108){
System.out.println("La materia mas baja es Estadistica");
}
else if(matba == 109){
System.out.println("La materia mas baja es Fisica");
}
else{
System.out.println("La materia mas baja es Quimica");
}
}
if(mnot < 3.0){
cont++;
}
notestu = notestu + mnot;
}
System.out.println("El estudiante "+miden+" perdio "+cont+" materias");
notestup = notestu / 1;
notcurso = notcurso + notestup;
}
notcursop = notcurso / n;
System.out.println("El promedio del curso es "+notcursop);
for(int yu = 0 ; yu <= n ; yu++){
notestu=0;
conta=0;
for(int to = 0 ; to <= 0 ; to++){
miden=est[yu].id;
mnot=est[yu].mat[to].notae;
if(mnot > notcursop){
conta++;
}
}
System.out.println("El estudiante "+miden+" tiene "+conta+" materias por encima del promedio");
}
}
}
public class estudiante{
String nb, ap1, ap2, di, tel, cod;
int id,id_cur, id_est,n=3;
float no_100;
matricula []mat;
public estudiante(int edi, String bn, String p1a, String p2a, String idd, String let, String doc) {
id = edi;
nb = bn;
ap1 = p1a;
ap2 = p2a;
di = idd;
tel = let;
cod = doc;
mat = new matricula[n];
}
public void arre(){
}
}
public class matricula {
int idcur,ident;
float notae;
public matricula(int idc, int ide, float not ) {
idcur = idc;
ident = ide;
notae = not;
}
}
public class principal {
public static void main(String[] args) {
grafica obt = new grafica();
}
}
utilizo botones para manejar
utilizo botones para manejar los eventos mira manajo los arreglos así:
este es el que envia lso valores a estudiantes:
este envia los valores a matricula:
est[i].mat[u] = new matricula(matera,estudiant,ut);
pero hay esta el error "supestamente lso guarda", pero si pido datos me genera errores como si estuviera pidiendo datos que no hay.
Y cual es el error? Que dice?
Y cual es el error? Que dice? ArrayIndexOutOfBounds?
no me sale el
no me sale el NullPointerException.
mi duda esta en el arreglo matricula, nose si este duncionando segun yo pienso, la verdad no habia trabajado un arreglo dentro de otro arreglo.
Te sale
Te sale esto?
java.lang.NullPointerException
at grafica$2.actionPerformed(grafica.java:71)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
si me sale ese
si me sale ese
Revisa que dice esa linea, la
Revisa que dice esa linea, la que te salga a tí, yo lo puse en un solo archivo y me sale la linea 71 que tiene esto:
El NullPointerException sale porque estas queriendo acceder algo que es nulo ( por ejemplo el estudiante )
No sé que es lo que este nulo, lo vas a tener que averiguar.
Puedes tratar de averiguar que es imprimiendolo:
mnot=est[yu].mat[to].notae;
Y ver porque estas tratanteo de acceder a un valor nulo.
En este caso seguramente es porque mat[to] es nulo y mat[to].notae da NullPointerException.
Suerte!
ok, gracias por tu ayuda, me
ok, gracias por tu ayuda, me voy a poner a averiguarlo haber que es
encontre el error
el error estaba en que al guardar los datos del arreglo matricula, no tenia cuidado de guardarlso en las posiciones correctas sino que lso guardaba secuencial mente osea 1,2,3,4 dejando así espacios en el arreglo, que generaba error al llamr datos en espacios vacios
Ahh perfecto. Suena a que ya
Ahh perfecto. Suena a que ya le encontraste