I'm with the following inconvenient, I have a java application, which consists of loading a certain number of employees, uploading the employees' data, and uploading the sales amount of each one, all based on using an ArrayList, the problem arises when I try to load more than one employee at the time of printing the data that carge shows me, all the data mixed, they told me it was because I did not clean the Arraylist (arraylist.clear ();), but using it erases me all, below I attach the All Classes used in an orderly manner, from now thank you very much for your attention !!!!
Main Class
package aplicacionempleado;
import java.util.ArrayList;
public class AplicacionEmpleado {
public static void main(String[] args)
{
System.out.println("Ingrese la Cantidad de Empleados");
int c=Leer.datoInt();
ArrayList<Empleado> Listaempleado=new ArrayList<Empleado>();
ArrayList<Ventas> Listaventa=new ArrayList<Ventas>();
for(int i=0;i<c;i++)
{
Empleado e=new Empleado();
System.out.println("Ingrese el Nombre del Empleado");
e.setNombre(Leer.readString());
System.out.println("Ingrese el apellido del empleado");
e.setApellido(Leer.readString());
System.out.println("Ingrese el legajo del empleado");
e.setLeg(Leer.datoInt());
Ventas v=new Ventas();
System.out.println("Ingrese la Cantidad de ventas del empleado"+e.getNombre());
v.setCantVentas(Leer.datoInt());
System.out.println("Ingrese el monto por comision");
v.setTarifa(Leer.datoDouble());
Listaventa.add(v);
e.setListaVenta(Listaventa);
Listaempleado.add(e);
}
for(int cantem=0;cantem<Listaempleado.size();cantem++) //Usamos este for para pasarle el monto que le corresponde al empleado
{
for(int cantto=0;cantto<Listaempleado.get(cantem).getListaVenta().size();cantto++)
{
double montoingreso=((Listaempleado.get(cantem).getListaVenta().get(cantem).getCantVentas())*
(Listaempleado.get(cantem).getListaVenta().get(cantem).getTarifa()));
Listaempleado.get(cantem).getListaVenta().get(cantem).setMontoIngreso(montoingreso);
}}
System.out.println("IMPREcION:");
for(int n=0;n<Listaempleado.size();n++)
{
System.out.println(Listaempleado.get(n).toString());
}
}
}
Employee Class
package aplicacionempleado;
import java.util.ArrayList;
public class Empleado
{
private String nombre;
private String apellido;
private int leg;
private ArrayList<Ventas>ListaVenta;
public Empleado() {
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public String getApellido() {
return apellido;
}
public void setApellido(String apellido) {
this.apellido = apellido;
}
public int getLeg() {
return leg;
}
public void setLeg(int leg) {
this.leg = leg;
}
public ArrayList<Ventas> getListaVenta() {
return ListaVenta;
}
public void setListaVenta(ArrayList<Ventas> ListaVenta) {
this.ListaVenta = ListaVenta;
}
@Override
public String toString() {
return "Empleado{" + "nombre=" + nombre + ", apellido=" + apellido + ", leg=" + leg + ", ListaVenta=" + ListaVenta + '}';
}
}
Sales Class
package aplicacionempleado;
public class Ventas
{
private int CantVentas;
private double tarifa;
private double MontoIngreso;
public Ventas() {
}
public int getCantVentas() {
return CantVentas;
}
public void setCantVentas(int CantVentas) {
this.CantVentas = CantVentas;
}
public double getTarifa() {
return tarifa;
}
public void setTarifa(double tarifa) {
this.tarifa = tarifa;
}
public double getMontoIngreso() {
return MontoIngreso;
}
public void setMontoIngreso(double MontoIngreso) {
this.MontoIngreso = MontoIngreso;
}
@Override
public String toString() {
return "Ventas{" + "CantVentas=" + CantVentas + ", tarifa=" + tarifa + ", MontoIngreso=" + MontoIngreso + '}';
}
}
Read class (Class that is used to read the data that the user enters)
package aplicacionempleado;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.StringTokenizer;
import java.util.NoSuchElementException;
public class Leer {
/**
* Objeto utilizado para parsear la linea introducida por el usuario
* mediante el teclado.
* @see #getNextToken(String)
*/
private static StringTokenizer st;
/**
* Objeto de I/O (entrada/salida) utilizado para leer los datos desde el
* teclado.
* @see #getNextToken(String)
*/
private static BufferedReader source;
/**
* Constructor privado implementado para evitar instanciacion y
* derivacion.
*/
private Leer() {}
/**
* Metodo utilizado para leer cadenas de caracteres que no contengan
* espacios. Los siguientes caracteres son considerados espacios:
* <ul>
* <li><code>' '</code>: espacio en blanco.
* <li><code>'\t'</code>: tabulacion (tab).
* <li><code>'\n'</code>: nueva linea, equivalente al [Enter] (new-line).
* <li><code>'\r'</code>: retorno de carro (carriage-return).
* <li><code>'\f'</code>: avance de pagina (form-feed).
* </ul>
* @return la primer palabra completa que se haya introducido.
* @see #readLine()
*/
public static String readString() {
return getNextToken();
}
/**
* Metodo utilizado para leer cadenas de caracteres que contengan
* espacios en blanco y/o tabulaciones.
* @return la linea introducida hasta que se encuentre un [Enter].
* @see #readString()
*/
public static String dato() {
return getNextToken("\r\n\f");
}
/**
* Metodo utilizado para leer numeros enteros de 32 bits.
* @return el numero introducido o 0 (cero) si el valor introducido
* no puede ser interpretado como numero entero. Esto ocurre cuando
* se introducen letras o signos de puntuacion mezclados con el
* numero.
* @see #readLong()
*/
public static int datoInt() {
return (int)datoLong();
}
/**
* Metodo utilizado para leer numeros enteros de 64 bits.
* @return el numero introducido o 0L (cero) si el valor introducido
* no puede ser interpretado como numero entero. Esto ocurre cuando
* se introducen letras o signos de puntuacion mezclados con el
* numero.
* @see #readInt()
*/
public static long datoLong() {
long retVal = 0;
try {
retVal = Long.parseLong(getNextToken());
} catch (NumberFormatException e) {}
return retVal;
}
/**
* Metodo utilizado para leer numeros reales de 32 bits de
* precision.
* @return el numero introducido o 0.0F (cero) si el valor introducido
* no puede ser interpretado como numero entero. Esto ocurre cuando
* se introducen letras o signos de puntuacion mezclados con el
* numero. Los unicos signos permitidos son el - (menos) al
* comienzo del numero y una unica aparicion del .
* (punto decimal).
* @see #readDouble()
*/
public static float datoFloat() {
return (float)datoDouble();
}
/**
* Metodo utilizado para leer numeros reales de 64 bits de
* precision.
* @return el numero introducido o 0.0 (cero) si el valor introducido
* no puede ser interpretado como numero entero. Esto ocurre cuando
* se introducen letras o signos de puntuacion mezclados con el
* numero. Los unicos signos permitidos son el - (menos) al
* comienzo del numero y una unica aparicion del .
* (punto decimal).
* @see #readFloat()
*/
public static double datoDouble() {
double retVal = 0.0;
try {
retVal = Double.valueOf(getNextToken()).doubleValue();
} catch (NumberFormatException e) {}
return retVal;
}
/**
* Metodo utilizado para leer un caracter.
* @return el primer caracter de la cadena introducida o ' package aplicacionempleado;
import java.util.ArrayList;
public class AplicacionEmpleado {
public static void main(String[] args)
{
System.out.println("Ingrese la Cantidad de Empleados");
int c=Leer.datoInt();
ArrayList<Empleado> Listaempleado=new ArrayList<Empleado>();
ArrayList<Ventas> Listaventa=new ArrayList<Ventas>();
for(int i=0;i<c;i++)
{
Empleado e=new Empleado();
System.out.println("Ingrese el Nombre del Empleado");
e.setNombre(Leer.readString());
System.out.println("Ingrese el apellido del empleado");
e.setApellido(Leer.readString());
System.out.println("Ingrese el legajo del empleado");
e.setLeg(Leer.datoInt());
Ventas v=new Ventas();
System.out.println("Ingrese la Cantidad de ventas del empleado"+e.getNombre());
v.setCantVentas(Leer.datoInt());
System.out.println("Ingrese el monto por comision");
v.setTarifa(Leer.datoDouble());
Listaventa.add(v);
e.setListaVenta(Listaventa);
Listaempleado.add(e);
}
for(int cantem=0;cantem<Listaempleado.size();cantem++) //Usamos este for para pasarle el monto que le corresponde al empleado
{
for(int cantto=0;cantto<Listaempleado.get(cantem).getListaVenta().size();cantto++)
{
double montoingreso=((Listaempleado.get(cantem).getListaVenta().get(cantem).getCantVentas())*
(Listaempleado.get(cantem).getListaVenta().get(cantem).getTarifa()));
Listaempleado.get(cantem).getListaVenta().get(cantem).setMontoIngreso(montoingreso);
}}
System.out.println("IMPREcION:");
for(int n=0;n<Listaempleado.size();n++)
{
System.out.println(Listaempleado.get(n).toString());
}
}
}
' (caracter nulo)
* si se introdujo una cadena vacia.
* @see #readString()
*/
public static char datoChar() {
char car = ' package aplicacionempleado;
import java.util.ArrayList;
public class Empleado
{
private String nombre;
private String apellido;
private int leg;
private ArrayList<Ventas>ListaVenta;
public Empleado() {
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public String getApellido() {
return apellido;
}
public void setApellido(String apellido) {
this.apellido = apellido;
}
public int getLeg() {
return leg;
}
public void setLeg(int leg) {
this.leg = leg;
}
public ArrayList<Ventas> getListaVenta() {
return ListaVenta;
}
public void setListaVenta(ArrayList<Ventas> ListaVenta) {
this.ListaVenta = ListaVenta;
}
@Override
public String toString() {
return "Empleado{" + "nombre=" + nombre + ", apellido=" + apellido + ", leg=" + leg + ", ListaVenta=" + ListaVenta + '}';
}
}
';
String str;
str = getNextToken(" package aplicacionempleado;
public class Ventas
{
private int CantVentas;
private double tarifa;
private double MontoIngreso;
public Ventas() {
}
public int getCantVentas() {
return CantVentas;
}
public void setCantVentas(int CantVentas) {
this.CantVentas = CantVentas;
}
public double getTarifa() {
return tarifa;
}
public void setTarifa(double tarifa) {
this.tarifa = tarifa;
}
public double getMontoIngreso() {
return MontoIngreso;
}
public void setMontoIngreso(double MontoIngreso) {
this.MontoIngreso = MontoIngreso;
}
@Override
public String toString() {
return "Ventas{" + "CantVentas=" + CantVentas + ", tarifa=" + tarifa + ", MontoIngreso=" + MontoIngreso + '}';
}
}
");
if (str.length() > 0) {
car = str.charAt(0);
st = new StringTokenizer(str.substring(1));
}
return car;
}
/**
* Metodo utilizado para obtener la siguiente palabra (o numero)
* del objeto parseador de la entrada.
* @return siguiente elemento del parseador de cadenas, considerando como
* separadores a los caracteres de espacio (ver documentacion de
* {@link #readString() readString()}).
* @see #getNextToken(String)
* @see #st
* @see "Documentacion de la clase <code>StringTokenizer</code> en el
* sitio oficial de Java: <a href="http://java.sun.com">http://java.sun.com</a>."
*/
private static String getNextToken() {
return getNextToken(null);
}
/**
* Metodo utilizado para obtener el siguiente elemento del objeto
* parseador de la entrada. Los elementos estaran definidos por el
* delimitador que se recibe como parametro.
* @param delim delimitador a utilizar durante el parseo de la entrada. Si
* el parametro es <code>null</code> se tomar�n los delimitadores
* indicados en {@link #readString() readString()}.
* @return siguiente elemento del parseador de cadenas, considerando como
* separadores al parámetro recibido.
* @see #getNextToken()
* @see #st
* @see "Documentación de la clase <code>StringTokenizer</code> en el
* sitio oficial de Java: <a href="http://java.sun.com">http://java.sun.com</a>."
*/
private static String getNextToken(String delim) {
String input;
String retVal = "";
try {
if ((st == null) || !st.hasMoreElements()) {
if (source == null) {
source = new BufferedReader(new InputStreamReader(System.in));
}
input = source.readLine();
st = new StringTokenizer(input);
}
if (delim == null) {
delim = " \t\n\r\f";
}
retVal = st.nextToken(delim);
} catch (NoSuchElementException e1) {
// si ocurre una excepci�n, no hacer nada
} catch (IOException e2) {
// si ocurre una excepci�n, no hacer nada
}
return retVal;
}
}