Foros del Web » Programación para mayores de 30 ;) » Java »

arreglo de tipo clase error al asignar. F1,F1,F1

Estas en el tema de arreglo de tipo clase error al asignar. F1,F1,F1 en el foro de Java en Foros del Web. bueno mis amigos declare un arreglo de tipo clase ya que necesito guardar los datos de 15 estudiantes nombre,cedula. aparente mente el arreglo sellena perooooooooooo ...
  #1 (permalink)  
Antiguo 24/04/2006, 17:01
 
Fecha de Ingreso: abril-2006
Mensajes: 72
Antigüedad: 18 años
Puntos: 0
arreglo de tipo clase error al asignar. F1,F1,F1

bueno mis amigos declare un arreglo de tipo clase ya que necesito guardar los datos de 15 estudiantes nombre,cedula.
aparente mente el arreglo sellena perooooooooooo el detalle esta es cuando va a mostrar ya q solo muestra el ultimo registro de estudiante realizado aqui los dejo el codigo pa que pillen AYUDA POR FAVOR........

import java.text.*;
import java.io.*;
public class DatOS {
int ci;
String nombre;
String apellido;


public void llenar(DatOS reg,DatOS arre[])throws IOException {//esta exepcion siempre se debe poner al lerr STRINGS????????
{
int i,j=0;
int k;
double ci2;
ci2=0;
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
for(i=0;i<=14;i++)
{
System.out.println("Numero de estudiantes registrados :" +i);
System.out.print("introduzca su nombre ");
reg.nombre=in.readLine();//lee un acedena

System.out.println();
System.out.print("introduzca su apellido ");
reg.apellido=in.readLine();//lee un acedena

System.out.println();
System.out.print("introduzca su cedula ");

int enc;

enc=0;
while(enc!=1)
{

try{

reg.ci=Integer.valueOf(in.readLine().trim()).intVa lue();
enc=1;
}
catch(NumberFormatException ex){
System.out.println("Error:el dato no es numero");
System.out.println("Introduzca Nuevamente la cedula deelestudiante : "+i);
enc=0;
}
if(enc==1)
{

int q;
for(q=0;q==i-1;q++)
{
if(reg.ci==arre[q].ci)
{
System.out.println("Error:la cedula ya existe");
System.out.println("Verifique la cedula");
enc=0;
}

}

}
}

System.out.println("****************************** ******************************");
if(i==1)
{
arre[i]=reg;
// System.out.println("ver +1 "+arre[0].ci);
}
else{ //reg.ci
while((j<i)&&(reg.ci>arre[j].ci)){
j=j+1;
}//fin mientras
k=i-1;
for(k=i-1;k>=j; k--)//recivar
{
arre[k+1]=arre[k];
}

arre[j]=reg;

}//fin else

//***************************************
//************************************************** *************

}//fin para
//UUU


}//fin exepcion
}

public void ordenar(DatOS arre[]){
int ind;
System.out.println("Registros Ordenados");
for(ind=0;ind<=14;ind++)
{
System.out.println("****************************** **********************");
System.out.println("****************************** **********************");
System.out.println("NOMBRE :"+arre[ind].nombre);
System.out.println("APELLIDO :"+arre[ind].apellido) ;
System.out.println("CEDULA :"+arre[ind].ci);
System.out.println("****************************** **********************");

System.out.println();
}
}


public static void main(String[] args) throws IOException {
// Create application frame.
DatOSFrame frame = new DatOSFrame();
DatOS reg=new DatOS();
int i,k;
int j=0;
DatOS and=new DatOS();
DatOS arre[];
arre=new DatOS[15]; //cambia a 15
reg.llenar(reg,arre);
reg.ordenar(arre);
}
}
  #2 (permalink)  
Antiguo 25/04/2006, 20:56
 
Fecha de Ingreso: abril-2006
Mensajes: 72
Antigüedad: 18 años
Puntos: 0
si algen lo leee

me dicen q hay q recargar el operador igual ¿¿¿¿como carrizo se hace???
  #3 (permalink)  
Antiguo 25/04/2006, 22:24
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Hola:

El problema es que sólo haces un new de DatOS, porlo que solo tienes una instancia de esa clase, sólo tienes un estudiante. En tu código estas rellenando el mismo objeto estudiante 15 veces, machacando cada vez los datos del anterior. La línea arre[i]=reg no hace copia del objeto, simplemente hace que arra[i] y reg tengan el mismo objetos. Si modificas datos en arre[i], los estás modificando también en reg.

Debes hacer tantos new DatOS como estudiantes tengas. Una forma "sencilla" sin liarte es dentro del bucle de 0 a 14 poner como primera línea

reg = new DatOS(...);

Se bueno.
__________________
Apuntes Java
Wiki de Programación
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:06.