0 votos

Tengo problemas al querer agregar datos a mi arraylist si continuo ingresando datos sin salir al menu, al momento de mandar a mostrarlos siempre me manda el ultimo dato agregado. Este es mi código

 

import java.util.ArrayList;
import java.util.Iterator;
import java.util.Scanner;
//import java.util.ArrayList;

public class MenuSistema {
        
    private static Scanner teclado = new Scanner(System.in);    
    private static int op;
    static ArrayList <Persona> Contactos = new ArrayList <Persona>();
    
    public static void main(String[] args)
    {        
        MenuPrincipal();
    }
        
    //MENU PRINCIPAL DEL SISTEMA
    public static void MenuPrincipal()
        {    
            System.out.println("\n");
            System.out.println("MENU DE OPCIONES DEL SISTEMA");    
            System.out.println("1.-PERSONAS");
            System.out.println("2.-ORGANIZACION");
            System.out.println("3.-NEGOCIOS");
            System.out.println("4.-ACTIVIDADES");
            System.out.println("5.-SALIR");
            op=Integer.parseInt(teclado.nextLine());
            
    //SWITCH PARA SELECCIONAR LAS OPCIONES DEL SISTEMA CON SON: PERSONAS, ORGANIZACIONES, NEGOCIOS Y ACTIVIDADES.
            switch(op)
            {
            case 1:
            MenuPersonas();    
            break;
            default :
                System.exit(0);;
            }    
        }
        
    //MENU DE OPCIONES DE PERSONAS.
        public static void MenuPersonas()
        {
        int op;//VARIABLE PARA EL MENU DE OPCIONES
        System.out.println("\n");
        System.out.println("MENU DE OPCIONES DEL SISTEMA");    
        System.out.println("1.-ALTAS PERSONAS");
        System.out.println("2.-BAJAS PERSONAS");
        System.out.println("3.-BUSCAR PERSONA");
        System.out.println("4.-MOSTAR PERSONA");
        System.out.println("5.-REGRESAR AL PRINCIPAL");
        op = Integer.parseInt(teclado.nextLine());
        switch (op)
        {
        case 1:
            System.out.println("1.-ALTAS PERSONAS");
            MenuSistema.AgregarPersonas(Contactos);        
            MenuPersonas();    
        break;
        case 2:
            System.out.println("2.-BAJAS PERSONAS");
        break;
        case 3:
            System.out.println("3.-BUSCAR PERSONA");
        break;
        case 4:
            System.out.println("4.-MOSTRAR PERSONAS");
            MenuSistema.MostrarPersonas(Contactos);;
            MenuPersonas();
            break;
        default :
            MenuPrincipal();
            break;
        }
        }
        
        public static void MostrarPersonas(ArrayList <Persona> Contactos)
        {
            Iterator it = Contactos.iterator();
            int i=0;
            if(!it.hasNext())
                System.out.println("No Hay Contactos");
            else
           while (it.hasNext())
           {
               it.next();
                System.out.println("CONTACTO N°:"+(i+1));
                System.out.println("NOMBRE:"+Contactos.get(i).getNombre());
                i++;    
             }
        }
        
        public static void AgregarPersonas(ArrayList <Persona> Contacctos)
        {
            Persona Datos=new Persona();// INICIALIZANDO VARIABLE DATOS    
            Scanner teclado = new Scanner(System.in);
            String cont;
            
            do
            {
            System.out.println("INGRESE EL NOMBRE DE LA PERSONA");
            Datos.setNombre(teclado.nextLine().toUpperCase());
            
            Contactos.add(Datos);
        
            System.out.println("DESEA CONTINUAR S/N:");
            cont = teclado.nextLine();
            }
        while (cont.equals("s") || cont.equals("S"));    
        }        
}

 

por en Java
editado por

1 Respuesta

0 votos
Cuando pasas a la función el ArrayList se pasa siempre vacío cada vez. Si vas a utilizarlo como estático y variable global no lo pases como parámetro en la función, directamente úsalo o devuélvelo en el return ;)
por
Gracias amigo, por tu respuesta.