Java - porque no puedo agregar mas personas?

 
Vista:

porque no puedo agregar mas personas?

Publicado por descode (4 intervenciones) el 03/06/2023 06:38:39
no entiendo que estoy haciendo mal, cuando ingreso la primera persona con el codigo de la ciudad correspondiente no se marca ningun error, pero cuando ingreso la segunda persona me salta el error de que no se pudo agregar que problema tengo? import BaseDatos.Ciudad;
import BaseDatos.Persona;
public class Nodo {
//Declaracion de atributos
private Object dato;
private Nodo dirsig;
//Constructor
public Nodo(Object dato, Nodo dirsig) {
this.dato = dato;
this.dirsig = dirsig;
}
public Nodo() {
this.dato = null;
this.dirsig = null;
}
//Get
public Object getDato() {
return dato;
}
public Nodo getDirsig() {
return dirsig;
}
//Set
public void setDato(Object dato) {
this.dato = dato;
}
public void setDirsig(Nodo dirsig) {
this.dirsig = dirsig;
}
public void mostrarciudad(){

System.out.println("Nombre:"+ ((Ciudad)dato).getNombre()+"\n");

}
public void mostrarpersona(){

System.out.println("Nombre :" + ((Persona)dato).getNombres()+"\n");
System.out.println("Apellido:" + ((Persona)dato).getApellidos()+"\n");
System.out.println("Sexo :" + ((Persona)dato).getSexo()+"\n");
System.out.println("edad :" + ((Persona)dato).getEdad()+"\n");
System.out.println("codigo ciudad :" + ((Persona)dato).getCodCiudad()+"\n");

}
}

public class Persona {
private int cedula, edad, sexo, codCiudad;
private String nombres, apellidos;

public Persona() {
this.cedula = 0;
this.codCiudad = 0;
this.edad = 0;
this.sexo = 0;
this.nombres = null;
this.apellidos = null;
}

public int getCedula() {
return cedula;
}

public int getEdad() {
return edad;
}

public int getSexo() {
return sexo;
}

public int getCodCiudad() {
return codCiudad;
}

public String getNombres() {
return nombres;
}

public String getApellidos() {
return apellidos;
}

public void setCedula(int cedula) {
this.cedula = cedula;
}

public void setEdad(int edad) {
this.edad = edad;
}

public void setSexo(int sexo) {
this.sexo = sexo;
}

public void setCodCiudad(int codCiudad) {
this.codCiudad = codCiudad;
}

public void setNombres(String nombres) {
this.nombres = nombres;
}

public void setApellidos(String apellidos) {
this.apellidos = apellidos;
}
}
public class Ciudad {
private int codCiudad;
private String nombre;

public Ciudad() {
this.codCiudad = 0;
this.nombre = null;
}

public int getCodCiudad() {
return codCiudad;
}

public String getNombre() {
return nombre;
}

public void setCodCiudad(int codCiudad) {
this.codCiudad = codCiudad;
}

public void setNombre(String nombre) {
this.nombre = nombre;
}
}


public class ListaCiudad {
//Declarar atributos
private Nodo inicio,fin;
//Constructor
public ListaCiudad(Nodo inicio, Nodo fin) {
this.inicio = inicio;
this.fin = fin;
}
public ListaCiudad() {
this.inicio = null;
this.fin = null;
}
//Get
public Nodo getInicio() {
return inicio;
}
public Nodo getFin() {
return fin;
}
//Set
public void setInicio(Nodo inicio) {
this.inicio = inicio;
}
public void setFin(Nodo fin) {
this.fin = fin;
}
//Adicionar
public boolean adicionar(Nodo n){
if(inicio == null){
inicio = n;fin = n;
return true;
}
else{
if(buscar(((Ciudad)n.getDato()).getCodCiudad(),inicio)== null){
fin.setDirsig(n);
fin = n;
return true;
}
else{
return false;
}
}
}
//Eliminar
public boolean adicionar(Nodo n, ListaCiudad lc) {
if (inicio == null) {
if (lc.buscar(((Persona) n.getDato()).getCodCiudad(), lc.getInicio())!= null) {
inicio = n;
fin = n;
return true;
} else {
return false;
}
} else {
Nodo act = inicio;
while (act!= null) {
if (((Persona) act.getDato()).getCodCiudad() == ((Persona) n.getDato()).getCodCiudad()) {
// Agregar la persona como un hijo de la persona existente
act.setDirsig(n);
n.setDato(act);
return true;
}
act = act.getDirsig();
}
// Si no se encontró una persona con el mismo código de ciudad, agregar la persona como una nueva persona
if (lc.buscar(((Persona) n.getDato()).getCodCiudad(), lc.getInicio())!= null) {
fin.setDirsig(n);
n.setDato(fin);
fin = n;
return true;
} else {
return false;
}
}
}

public boolean eliminar(int codCiudad, Nodo ant, Nodo act,ListaPersona lp) {
if (inicio == null) {
return false;
} else {
try{
lp.eliminarciudad(codCiudad);
}
catch(Exception e){

}
if (act != null) {

// Resto del código para eliminar la ciudad
if (inicio == act) {
inicio = act.getDirsig();
act.setDirsig(null);
return true;
} else {
if (fin == act) {
fin = ant;
ant.setDirsig(null);
return true;
} else {
ant.setDirsig(act.getDirsig());
act.setDirsig(null);
return true;
}
}


} else {
eliminar(codCiudad, act, act.getDirsig(),lp);
}
return false;
}
}



public Nodo buscar(int codCiudad, Nodo act) {
if (act != null) {
if (codCiudad == ((Ciudad) act.getDato()).getCodCiudad()) {
return act;
} else {
return buscar(codCiudad, act.getDirsig());
}
}
return null;
}
//Modificar un dato en el nodo de una lista
public boolean modificar(int codCiudad, String nombCiudad, int nuevoCodCiudad,ListaPersona lp) {
Nodo act = this.buscar(codCiudad, inicio);
if (act == null) {
return false;
} else {
// Modificar el nombre de la ciudad
((Ciudad) act.getDato()).setNombre(nombCiudad);

// Asignar el nuevo código de ciudad a las personas asociadas
int codPersona = ((Ciudad) act.getDato()).getCodCiudad();
Nodo persona = buscarPersona(codPersona);
while (persona != null) {
((Persona) persona.getDato()).setCodCiudad(nuevoCodCiudad);
persona = buscarPersona(codPersona); // Buscar la siguiente persona con el mismo código
}

return true;
}
}

// Método para buscar una persona en la lista
public Nodo buscarPersona(int cedula) {
Nodo act = inicio;

while (act != null) {
if (((Persona) act.getDato()).getCedula() == cedula) {
return act;
}

act = act.getDirsig();
}

return null;
}
//mostrar informacion de la lista
public boolean mostrar(){
Nodo act = inicio;
int c=1;
if(inicio == null){
return false;

}
else{
while(act != null){
System.out.println("Ciudad " + c + "\n");
act.mostrarciudad();
act = act.getDirsig();
c++;
}
return true;
}
}
}
public class ListaPersona {
//Declarar atributos
private Nodo inicio,fin;
//Constructor
public ListaPersona(Nodo inicio, Nodo fin) {
this.inicio = inicio;
this.fin = fin;
}
public ListaPersona() {
this.inicio = null;
this.fin = null;
}
//Get
public Nodo getInicio() {
return inicio;
}
public Nodo getFin() {
return fin;
}
//Set
public void setInicio(Nodo inicio) {
this.inicio = inicio;
}
public void setFin(Nodo fin) {
this.fin = fin;
}
//Adicionar
public boolean adicionar(Nodo n,ListaCiudad lc){
if(inicio == null){
if(lc.buscar(((Persona)n.getDato()).getCodCiudad(),lc.getInicio()) != null){
inicio = n;fin = n;
return true;
}
else{
return false;
}

}
return false;
}

//Eliminar

public boolean eliminar(int cedula) {
if (inicio == null) {
return false;
} else {
Nodo act = inicio;
Nodo ant = null;
while (act != null) {
if (cedula == ((Persona) act.getDato()).getCedula()) {


if (inicio == act) {
inicio = act.getDirsig();
act.setDirsig(null);
return true;
} else {
if (fin == act) {
fin = ant;
ant.setDirsig(null);
return true;
} else {
ant.setDirsig(act.getDirsig());
act.setDirsig(null);
return true;
}
}
} else {
ant = act;
act = act.getDirsig();
}
}
return false;
}
}
public boolean eliminarciudad(int cedula) {
if (inicio == null) {
return false;
} else {
Nodo act = inicio;
Nodo ant = null;
while (act != null) {
if (cedula == ((Persona) act.getDato()).getCodCiudad()) {


if (inicio == act) {
inicio = act.getDirsig();
act.setDirsig(null);
return true;
} else {
if (fin == act) {
fin = ant;
ant.setDirsig(null);
return true;
} else {
ant.setDirsig(act.getDirsig());
act.setDirsig(null);
return true;
}
}
} else {
ant = act;
act = act.getDirsig();
}
}
return false;
}
}


//Buscar un dato en la ListaCiudad
public Nodo buscar(int cedula){
Nodo act = inicio;
while(act != null){
if(cedula == ((Persona)act.getDato()).getCedula()){
return act;
}
else{
act = act.getDirsig();
}
}
return null;
}
//Modificar un dato en el nodo de una lista
public boolean modificar(Nodo n, ListaCiudad lc) {
Nodo act = this.buscar(((Persona) n.getDato()).getCedula());

if (act == null) {
return false;
} else {
// Obtener la ciudad actual de la persona
int codCiudadActual = ((Persona) act.getDato()).getCodCiudad();
// Obtener la nueva ciudad de la persona
int codCiudadNueva = ((Persona) n.getDato()).getCodCiudad();

// Verificar si se necesita cambiar la ciudad de la persona
if (codCiudadActual != codCiudadNueva) {
// Eliminar la ciudad actual y sus personas asociadas de la lista de ciudades

// Agregar la persona a la nueva ciudad en la lista de ciudades
lc.adicionar(n);
}

// Modificar los datos de la persona
((Persona) act.getDato()).setEdad(((Persona) n.getDato()).getEdad());
((Persona) act.getDato()).setNombres(((Persona) n.getDato()).getNombres());
return true;
}
}






//mostrar informacion de la lista
public boolean mostrar(){
Nodo act = inicio;
int c = 0;
if(inicio == null){
return false;
}
else{
while(act != null){


c++;
System.out.println("Persona " + c + ":\n");
act.mostrarpersona();
act = act.getDirsig();
}
return true;
}
}

void emigrarcodigo(int codigociudad,int nuevo) {
if (inicio == null) {

} else {
Nodo act = inicio;
Nodo ant = null;
while (act != null) {
if (codigociudad == ((Persona) act.getDato()).getCodCiudad()) {
((Persona) act.getDato()).setCodCiudad(nuevo);
} else {
ant = act;
act = act.getDirsig();
}
}

}
}


}
import BaseDatos.Ciudad;
import BaseDatos.Persona;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
ListaCiudad lc = new ListaCiudad();
ListaPersona lp = new ListaPersona();

int opcion;
do {
System.out.println("1. Agregar ciudad");
System.out.println("2. Agregar persona");
System.out.println("3. Eliminar ciudad y sus personas");
System.out.println("4. Eliminar persona");
System.out.println("5. Modificar ciudad y persona");
System.out.println("6. Mostrar ciudades");
System.out.println("7. Mostrar personas");
System.out.println("8. Salir");
System.out.print("Ingrese una opción: ");
opcion = scanner.nextInt();

switch (opcion) {
case 1:
Ciudad c = new Ciudad();

System.out.print("Ingrese el código de la ciudad: ");
c.setCodCiudad(scanner.nextInt());

System.out.print("Ingrese el nombre de la ciudad: ");
c.setNombre(scanner.next());

Nodo n = new Nodo(c, null);
n.setDato(c);

if ((lc.adicionar(n))) {
System.out.println("Se ha adicionado correctamente");
} else {
System.out.println("No se ha podido adicionar código de la ciudad existe");
}
break;

case 2:
System.out.print("Ingrese el nombre de la persona: ");
String nombre = scanner.next();

System.out.print("Ingrese el apellido de la persona: ");
String apellido = scanner.next();

System.out.print("Ingrese la cédula de la persona: ");
int cedula = scanner.nextInt();

System.out.print("Ingrese la edad de la persona: ");
int edad = scanner.nextInt();

System.out.print("Ingrese el código de la ciudad de la persona: ");
int codCiudad = scanner.nextInt();

Persona persona = new Persona();
persona.setNombres(nombre);
persona.setApellidos(apellido);
persona.setCedula(cedula);
persona.setEdad(edad);
persona.setCodCiudad(codCiudad);

Nodo nodo = new Nodo();
nodo.setDato(persona);

if (lp.adicionar(nodo, lc)) {
System.out.println("Persona agregada correctamente");
} else {
System.out.println("No se pudo agregar la persona");
}
break;

case 3:
System.out.print("Ingrese el código de la ciudad a eliminar: ");
int codCiudadEliminar = scanner.nextInt();

if (lc.eliminar(codCiudadEliminar, null, lc.getInicio(), lp)) {
System.out.println("Dato eliminado");
} else {
System.out.println("El dato no se pudo eliminar");
}
break;

case 4:
System.out.print("Ingrese la cédula de la persona que desea eliminar: ");
int cedulaEliminar = scanner.nextInt();
lp.eliminar(cedulaEliminar);
break;

case 5:
System.out.print("Ingrese el código de la ciudad a modificar: ");
int codCiudadModificar = scanner.nextInt();

Nodo nodoCiudad = lc.buscar(codCiudadModificar, lc.getInicio());
if (nodoCiudad!= null) {
Ciudad ciudadEncontrada = (Ciudad) nodoCiudad.getDato();

System.out.println("Datos actuales de la ciudad:");
System.out.println("Código: " + ciudadEncontrada.getCodCiudad());
System.out.println("Nombre: " + ciudadEncontrada.getNombre());
System.out.print("Ingrese el nuevo nombre de la ciudad: ");
String nuevoNombre = scanner.next();

ciudadEncontrada.setNombre(nuevoNombre);

System.out.println("Ciudad modificada correctamente");
} else {
System.out.println("No se encontró ninguna ciudad con ese código");
}
break;
case 6:
lc.mostrar();
break;
case 7:
lp.mostrar();
break;
case 8:
System.out.println("Saliendo del programa...");
break;
default:
System.out.println("Opción inválida. Intente de nuevo.");
break;
}
} while (opcion!= 8);
}
}
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