Foro de elhacker.net

Programación => Java => Mensaje iniciado por: Baal_30 en 15 Marzo 2015, 01:49 am



Título: Error con char y métodos listas
Publicado por: Baal_30 en 15 Marzo 2015, 01:49 am
Muy buenas, estoy aquí de nuevo con más dudas :/

Tengo este código :

Código
  1. public static void main(String[] args) {
  2.  
  3. ArrayList<Empleado> empleados = new ArrayList<Empleado>();
  4.  
  5. String resp;
  6. Scanner S = new Scanner(System.in);
  7.  
  8. do{
  9. char respuesta = 'S';
  10. System.out.print("Introduce el nombre del empleado: ");
  11. String nombre = S.nextLine();
  12. System.out.println();
  13.  
  14. System.out.print("Introduce su sueldo: ");
  15. int sueldo = S.nextInt();
  16. System.out.println();
  17.  
  18. empleados.add(Empleado(nombre, sueldo));
  19.  
  20. System.out.println("¿Quieres añadir algún empleado más? (S/N)");
  21. resp = S.nextLine();
  22. resp = resp.toUpperCase();
  23. respuesta = (char)resp.charAt(0);
  24.  
  25. }while(respuesta=='S');
  26.  
  27. for(Empleado empl : empleados){
  28. empleados.get(empl);
  29. }


Tengo una clase llamada Empleado con este constructor :

Código
  1. private String nombre;
  2. private int sueldo;
  3.  
  4. public Empleado(String nombre, int sueldo){
  5. this.nombre = nombre;
  6. this.sueldo = sueldo;
  7. }

Y me da error en :
Código
  1. empleados.add(Empleado(nombre, sueldo));

También en el while, no entiendo por que :/

Y otro más en el método .get de la lista empleados (en el for).

La verdad es que llevo rato mirando el código y no tengo ni la más remota idea de porque esos errores :/

Gracias de antemano y un abrazo.


Título: Re: Error con char y métodos listas
Publicado por: crack81 en 15 Marzo 2015, 02:56 am
Código
  1. empleados.add(Empleado(nombre, sueldo));

en esta linea te esta faltando poner new ya que cada vez que agregas objeto Empleado tiene que ser uno nuevo

Código
  1. empleados.add(new Empleado(nombre, sueldo));

ademeas el for el metodo get pide un indice entero y tu le estas pasando un objeto lo mas correcto seria hacer un for desde 0 hasta empleados.size

espero solucione tus problemas saludos...

codigo
Código
  1. public class Testeo {
  2.  
  3.    /**
  4.      * @param args the command line arguments
  5.      */
  6.    public static void main(String[] args) {
  7.  
  8.        ArrayList<Empleado> empleados = new ArrayList<Empleado>();
  9.  
  10.        String resp;
  11.        Scanner S = new Scanner(System.in);
  12.        char respuesta = 'S';
  13.  
  14.        do{
  15.  
  16.            System.out.print("Introduce el nombre del empleado: ");
  17.            String nombre = S.nextLine();
  18.            System.out.println();
  19.  
  20.            System.out.print("Introduce su sueldo: ");
  21.            int sueldo = S.nextInt();
  22.            S.nextLine();//despues de usar el S.nextInt(); al teclear enter el valor se que da en el limbo
  23.            //por lo cual es recomendable hacer un S.nextline(); antes del siguiente S.nextline();
  24.            System.out.println();
  25.  
  26.            empleados.add(new Empleado(nombre, sueldo));//tienes que añadir un nuevo objeto cada vez que agreges
  27.            //un empleado a la lista
  28.  
  29.            System.out.println("¿Quieres añadir algún empleado más? (S/N)");
  30.            resp = S.nextLine();
  31.            resp = resp.toUpperCase();
  32.            respuesta = (char)resp.charAt(0);
  33.  
  34.            }while(respuesta=='S');
  35.  
  36.  
  37.        for(int i=0;i<empleados.size();i++){
  38.            System.out.println(empleados.get(i).toString());//el empleados get pide un entero no un objeto caso como lo tenias antes
  39.        }
  40.  
  41.  
  42.    }
  43.  
  44. }
  45.  


Título: Re: Error con char y métodos listas
Publicado por: PabloPbl en 15 Marzo 2015, 03:24 am
Para no ser repetitivo, he modificado un poco tu código. El código cumple la misma finalidad, solo que esta implementado de otra manera, te recomiendo que lo veas xD:

Código
  1. import java.util.ArrayList;
  2. import java.util.Scanner;
  3.  
  4. public class Clase1 {
  5.  
  6.    public static void main(String[] args) {
  7.        ArrayList<Empleado> empleados = new ArrayList<Empleado>();
  8.  
  9.        Scanner s = new Scanner(System.in);
  10.  
  11.        while(true) {
  12.            System.out.print("Introduce el nombre del empleado: ");
  13.            String nombre = s.next();
  14.            System.out.println();
  15.  
  16.            System.out.print("Introduce su sueldo: ");
  17.            int sueldo = s.nextInt();
  18.            System.out.println();
  19.  
  20.            empleados.add(new Empleado(nombre, sueldo));
  21.  
  22.            System.out.println("¿Quieres añadir algún empleado más? (S/N)");
  23.            String respuesta = s.next();
  24.            if(respuesta.equalsIgnoreCase("n")) {
  25.                break;
  26.            }
  27.        }
  28.  
  29.        for(int i = 0; i < empleados.size(); i++){
  30.         empleados.get(i).get();
  31.        }
  32.    }
  33. }
  34.  
  35.  

Y esta es la clase Empleado, mira que he creado mi método get.

Código
  1. class Empleado {
  2.    private String nombre;
  3.    private int sueldo;
  4.  
  5.    public Empleado(String nombre, int sueldo){
  6.            this.nombre = nombre;
  7.            this.sueldo = sueldo;
  8.    }
  9.  
  10.    public void get() {
  11.        if(sueldo > 1) {
  12.            System.out.println("Este empleado se llama "+this.nombre+" y su sueldo es de "+this.sueldo+" dolares por mes");
  13.        }
  14.        else if(sueldo >0) {
  15.            System.out.println("Este empleado se llama "+this.nombre+" y su sueldo es de "+this.sueldo+" dolar por mes");
  16.        }
  17.        else{
  18.            System.out.println("Este empleado se llama "+this.nombre+" y no tiene sueldo");
  19.        }
  20.    }
  21. }
  22.  
  23.  

Salu2.


Título: Re: Error con char y métodos listas
Publicado por: Baal_30 en 15 Marzo 2015, 14:46 pm
Joder, que empanao que estoy :/ no darme cuenta del new...  :-[

He estado viendo tu código, y no se, ¿Es mejor hacerlo con un while, que con un do/while?
Lo que si voy a cambiar es lo de la condición, así es más simple sin pasarlo a char y tal :P

Respecto a lo del get, todavía no entiendo bien esa función, (si que la entiendo como la tienes hecha tú, lo que no entiendo es lo que hace si no la escribes tú mismo en la clase del objeto...) Pero, se me ha olvidado comentar que lo que tengo que mostrar son los empleados que no tengan ningún dato igual que otro, osea, si uno tiene de sueldo 1000, y otro también tiene 1000, que sólo muestre uno, aunque se llamen diferente.  O sea, que no muestre datos repetidos.

No se por donde cogerlo :/

Ah y se me olvidaba, gracias por las respuestas :)


Título: Re: Error con char y métodos listas
Publicado por: PabloPbl en 15 Marzo 2015, 16:17 pm
Pocas veces he tenido que recurrir al do/while, desde mi punto de vista, veo bastante mas sencillo hacerlo con el while, es como mas entendible.

Pues esa función get que dices, es propia de la clase ArrayList y lo que hace es devolver un objeto dentro del ArrayList, por ejemplo:

Código
  1. ArrayList array = new ArrayList();

Si yo quisiera obtener algo del array lo haría así:

Código
  1. array.get(0);

Ahí estaría obteniendo un objeto que esta en la posicion 1, funciona igual que con los Arrays tradicionales, tu metes y sacas los valores.

En cuanto a lo de:
Citar
Pero, se me ha olvidado comentar que lo que tengo que mostrar son los empleados que no tengan ningún dato igual que otro, osea, si uno tiene de sueldo 1000, y otro también tiene 1000, que sólo muestre uno, aunque se llamen diferente.  O sea, que no muestre datos repetidos.

Acá tienes que usar un poco mas de lógica, yo lo hice de la siguiente manera,
Seria bueno que le heches un ojo y lo intentes hacer de nuevo basándote en este código:

Código
  1. import java.util.ArrayList;
  2. import java.util.Scanner;
  3.  
  4. public class Clase1 {
  5.  
  6.    public static void main(String[] args) {
  7.        ArrayList<Empleado> empleados = new ArrayList<Empleado>();
  8.  
  9.        Scanner s = new Scanner(System.in);
  10.  
  11.        while(true) {
  12.            System.out.print("Introduce el nombre del empleado: ");
  13.            String nombre = s.next();
  14.            System.out.println();
  15.  
  16.            System.out.print("Introduce su sueldo: ");
  17.            int sueldo = s.nextInt();
  18.            System.out.println();
  19.  
  20.            empleados.add(new Empleado(nombre, sueldo));
  21.  
  22.            System.out.println("¿Quieres añadir algún empleado más? (S/N)");
  23.            String respuesta = s.next();
  24.            if(respuesta.equalsIgnoreCase("n")) {
  25.                break;
  26.            }
  27.        }
  28.  
  29.        int[] valores = new int[empleados.size()];//En este array vamos guardando todos los valores de los empleados a medida que lo mostramos
  30.  
  31.        for(int i = 0; i < empleados.size(); i++){//Recorremos todos los empleados agregados
  32.            boolean mostrarEmpleadoActual = true;//Inidicamos si mostramos el usuario actual o no
  33.  
  34.            //Este ciclo se fija si el empleado actual tiene el mismo sueldo que otro empleado, si es asi cambia el valor de la variable
  35.            //mostrarEmpleadoActual por false
  36.            for (int i2 = 0; i2 < valores.length; i2++) {
  37.                if(empleados.get(i).getSueldo() == valores[i2]) {
  38.                    mostrarEmpleadoActual = false;
  39.                    break;
  40.                }
  41.            }
  42.  
  43.            //Se fija el valor de la variable mostrarEmpleadoActual, si es verdadero mostramos el empleado
  44.            if(mostrarEmpleadoActual) {
  45.                valores[i] = empleados.get(i).getSueldo();
  46.                empleados.get(i).get();
  47.            }
  48.        }
  49.    }
  50. }
  51.  
  52.  
  53.  
Lo único que he hecho acá fue cambiar agregar un array de int y modificar totalmente el ciclo for del final.

Código
  1. public int getSueldo() {
  2.        return this.sueldo;
  3.    }
  4.  


Este metodo deberás agregarlo a la clase Empleado.

Si no entiendes algo, comenta la duda.

Salu2  ;)


Título: Re: Error con char y métodos listas
Publicado por: Baal_30 en 15 Marzo 2015, 16:51 pm
Pero, si lo que te muestra es un objeto por ejemplo, Empleado, como el que tengo creado, ¿que te muestra exactamente? ¿todos sus atributos? ¿o el nombre del objeto creado?

Y respecto al código, he tenido que mirarmelo varias veces, me cuesta entenderlo haha :/ pero, tampoco se pueden repetir los nombres, no sólo el sueldo... ¿tendría que hacer dos arrays y dos blucles for más? :/



Título: Re: Error con char y métodos listas
Publicado por: PabloPbl en 15 Marzo 2015, 17:04 pm
Cuando yo estoy haciendo esto:

Código
  1. empleados.get(i).get();

Estoy haciendo referencia al objeto en la posición X del ArrayList con el metodo get y pasandole como parámetro el objeto que quiero hacer referencia, fíjate esto:

Código
  1. Empleado empleado1 = new Empleado("Baal_30", 4000);
  2. empleado1.get();

Acá estoy creando un objeto y abajo estoy haciendo referencia al objeto creado y llamando a su metodo.

Citar
Y respecto al código, he tenido que mirarmelo varias veces, me cuesta entenderlo haha :/ pero, tampoco se pueden repetir los nombres, no sólo el sueldo... ¿tendría que hacer dos arrays y dos blucles for más? :/

Pero quieres que no se puedan crear 2 empleados con el mismo nombre o que no se repitan cuando los imprimo??.


Título: Re: Error con char y métodos listas
Publicado por: PabloPbl en 15 Marzo 2015, 17:11 pm
Cuando tu guardas objetos en un ArrayList y quieres llamar a un método de algún objeto o cambiarle algún atributo, primero tienes que referenciarte a dicho objeto y luego llamar a los métodos o atributos del mismo.

El clase ArrayList tiene un metodo get que te devuelve la referencia al objeto para poder manipularlo y cambiarle los atributos del objeto, como dije anteriormente es lo mismo que hacerlo asi:

Código
  1. Empleado empleado1 = new Empleado("Baal_30", 4000);
  2. empleado1.get();

y asi se haria con un arrayList:

Código
  1. ArrayList array = new ArrayList();
  2. array.add(new Empleado("Baal_30", 4000));
  3. array.get(0).get();
  4.  


Título: Re: Error con char y métodos listas
Publicado por: crack81 en 15 Marzo 2015, 17:41 pm
creo que este codigo resuelve tus dudas no repite ni sueldos ni nombre
o si no vuelve a plantear tu pregunta

Código
  1. import java.util.ArrayList;
  2. import java.util.Scanner;
  3.  
  4. /**
  5.  *
  6.  * @author bdwong
  7.  */
  8.  
  9.  
  10.  
  11. public class Testeo {
  12.  
  13.  
  14.   public static boolean repetido(ArrayList<Empleado> data,String nombre, int sueldo){
  15.  
  16.       for(int i=0;i<data.size();i++){
  17.            if((data.get(i).getNombre().equals(nombre)) || (data.get(i).getSueldo()==sueldo)){
  18.                return true;
  19.            }
  20.  
  21.       }
  22.  
  23.       return false;
  24.  }
  25.  
  26.    /**
  27.      * @param args the command line arguments
  28.      */
  29.    public static void main(String[] args) {
  30.       ArrayList<Empleado> empleados = new ArrayList<Empleado>();
  31.  
  32.       Scanner s = new Scanner(System.in);
  33.  
  34.       while(true) {
  35.           System.out.println("Introduce el nombre del empleado: ");
  36.           String nombre = s.nextLine();
  37.  
  38.  
  39.  
  40.           System.out.println("Introduce su sueldo: ");
  41.           int sueldo = s.nextInt();
  42.           s.nextLine();
  43.  
  44.  
  45.  
  46.  
  47.           if(!repetido(empleados, nombre, sueldo)){
  48.                empleados.add(new Empleado(nombre, sueldo));
  49.           }
  50.  
  51.  
  52.  
  53.           System.out.println("¿Quieres añadir algún empleado más? (S/N)");
  54.           String respuesta = s.next();
  55.           s.nextLine();
  56.           if(respuesta.equalsIgnoreCase("n")) {
  57.               break;
  58.           }
  59.       }
  60.  
  61.       for(int i=0;i<empleados.size();i++){
  62.  
  63.           System.out.println("Empleado "+empleados.get(i).getNombre()+" sueldo "+empleados.get(i).getSueldo());
  64.       }
  65.  
  66.  
  67.    }
  68.  
  69. }
  70.  



Código
  1. public class Empleado {
  2.  
  3.  
  4.    private String nombre;
  5.    private int sueldo;
  6.  
  7.    public String getNombre() {
  8.        return nombre;
  9.    }
  10.  
  11.  
  12.  
  13.    public int getSueldo() {
  14.        return sueldo;
  15.    }
  16.  
  17.  
  18.  
  19.    public Empleado(String nombre, int sueldo){
  20.           this.nombre = nombre;
  21.           this.sueldo = sueldo;
  22.    }
  23.  
  24. }


Título: Re: Error con char y métodos listas
Publicado por: Baal_30 en 15 Marzo 2015, 18:44 pm
Pablopbl genial explicado ;) El método get del ArrayList te dice que objeto está en esa posición, pero no te muestra nada por sí mismo, sólo la referencia al objeto como tal ¿no?

Y el método de "repetido" de crack81 creo que funcionaría bien, pero no veo cuando llamas a ese método para mostrar los que no se repiten en el for del main :/


Título: Re: Error con char y métodos listas
Publicado por: PabloPbl en 15 Marzo 2015, 18:49 pm
^^ exactamente es así como dices xD

En cuanto al método repetido, si que lo llama para hacer comprobaciones con el if:

Código
  1. if(!repetido(empleados, nombre, sueldo)){
  2.                empleados.add(new Empleado(nombre, sueldo));
  3.           }

Ya que ese método devuelve un boolean y sirve para validar.

Salu2.


Título: Re: Error con char y métodos listas
Publicado por: Baal_30 en 15 Marzo 2015, 19:54 pm
Aaah vale, lo usa para crear o no el nuevo Empleado. Yo a lo que me refería es que no muestre los que se repitan algun dato, pero que si los pueda crear. Supongo que poniendo el if ese dentro del for del main, y en vez de llamar al constructor, que imprima lo que imprime el for, conseguiría el resultado que busco, ¿no?


Título: Re: Error con char y métodos listas
Publicado por: PabloPbl en 15 Marzo 2015, 20:08 pm
Y tendrías que hacer algo parecido a lo que hice con el sueldo, si entendiste el código no debería ser un problema.

Cualquier duda me dices.


Título: Re: Error con char y métodos listas
Publicado por: Baal_30 en 15 Marzo 2015, 20:49 pm
Voy a probar! okey cualquier duda te comento ;)

Muchas gracias :D


Título: Re: Error con char y métodos listas
Publicado por: Baal_30 en 15 Marzo 2015, 21:05 pm
No me aclaro :/

He modificado así el código del for para imprimir:

Código
  1. for(int i=0;i<empleados.size();i++){
  2.  if(repetido(empleados, empleados.get(i).getNombre(), empleados.get(i).getSueldo())){
  3.  System.out.println("Empleado "+empleados.get(i).getNombre()+" sueldo "+empleados.get(i).getSueldo());
  4.           }
  5. }


Y el método lo he dejado así :

Código
  1. public static boolean repetido(ArrayList<Empleado> empleados, String nombre, int sueldo){
  2.  
  3.       for(int i=0;i<empleados.size();i++){
  4.            if((empleados.get(i).getNombre().equals(nombre)) || (empleados.get(i).getSueldo()==sueldo)){
  5.                return false;
  6.            }
  7.       }
  8.  
  9.       return true;
  10.  }

Y pruebo creando 3 objetos, y dos de ellos con el mismo nombre, y no me imprime ninguno :/ y si cambio los returns( el false por el true y viceversa) me imprime los 3 aunque se repitan :/



Título: Re: Error con char y métodos listas
Publicado por: PabloPbl en 15 Marzo 2015, 21:32 pm
Mira este Código:


Clase 1:

Código
  1. import java.util.ArrayList;
  2. import java.util.Scanner;
  3.  
  4. public class Clase1 {
  5.  
  6.    public static void main(String[] args) {
  7.        ArrayList<Empleado> empleados = new ArrayList<Empleado>();
  8.  
  9.        Scanner s = new Scanner(System.in);
  10.  
  11.        while(true) {
  12.            System.out.print("Introduce el nombre del empleado: ");
  13.            String nombre = s.next();
  14.            System.out.println();
  15.  
  16.            System.out.print("Introduce su sueldo: ");
  17.            int sueldo = s.nextInt();
  18.            System.out.println();
  19.  
  20.            empleados.add(new Empleado(nombre, sueldo));
  21.  
  22.            System.out.println("¿Quieres añadir algún empleado más? (S/N)");
  23.            String respuesta = s.next();
  24.            if(respuesta.equalsIgnoreCase("n")) {
  25.                break;
  26.            }
  27.        }
  28.  
  29.        int[] valores = new int[empleados.size()];//En este array vamos guardando todos los valores de los empleados a medida que lo mostramos
  30.        String[] empleadosImprimidos = new String[empleados.size()];
  31.  
  32.        for(int i = 0; i < empleados.size(); i++){//Recorremos todos los empleados agregados
  33.            boolean mostrarEmpleadoActual = true;//Inidicamos si mostramos el usuario actual o no
  34.  
  35.            //Este ciclo se fija si el empleado actual tiene el mismo sueldo que otro empleado, si es asi cambia el valor de la variable
  36.            //mostrarEmpleadoActual por false
  37.            for (int i2 = 0; i2 < valores.length; i2++) {
  38.                if(empleados.get(i).getSueldo() == valores[i2]) {
  39.                    mostrarEmpleadoActual = false;
  40.                    break;
  41.                }
  42.            }
  43.  
  44.            if(mostrarEmpleadoActual == true) {
  45.                for(int i3 = 0; i3 < empleadosImprimidos.length; i3++) {
  46.                    if(empleados.get(i).getNombre().equals(empleadosImprimidos[i3])) {
  47.                        mostrarEmpleadoActual = false;
  48.                        break;
  49.                    }
  50.                }
  51.            }
  52.  
  53.            //Se fija el valor de la variable mostrarEmpleadoActual, si es verdadero mostramos el empleado
  54.            if(mostrarEmpleadoActual) {
  55.                valores[i] = empleados.get(i).getSueldo();
  56.                empleadosImprimidos[i] = empleados.get(i).getNombre();
  57.                empleados.get(i).get();
  58.            }
  59.        }
  60.    }
  61. }
  62.  

Clase Empleado:
Código
  1.  
  2. class Empleado {
  3.    private String nombre;
  4.    private int sueldo;
  5.  
  6.    public Empleado(String nombre, int sueldo){
  7.            this.nombre = nombre;
  8.            this.sueldo = sueldo;
  9.    }
  10.  
  11.    public void get() {
  12.        if(sueldo > 1) {
  13.            System.out.println("Este empleado se llama "+this.nombre+" y su sueldo es de "+this.sueldo+" dolares por mes");
  14.        }
  15.        else if(sueldo >0) {
  16.            System.out.println("Este empleado se llama "+this.nombre+" y su sueldo es de "+this.sueldo+" dolar por mes");
  17.        }
  18.        else{
  19.            System.out.println("Este empleado se llama "+this.nombre+" y no tiene sueldo");
  20.        }
  21.    }
  22.  
  23.    public int getSueldo() {
  24.        return this.sueldo;
  25.    }
  26.  
  27.    public String getNombre() {
  28.        return this.nombre;
  29.    }
  30. }
  31.  
  32.  

Este Código hace todo lo que quieres, tan solo tuve que modificar el for y agregar un array de String y problema solucionado.

Prueba haber que tal.

Salu2.


Título: Re: Error con char y métodos listas
Publicado por: PabloPbl en 15 Marzo 2015, 22:38 pm
Te he enviado un MP  ;).


Título: Re: Error con char y métodos listas
Publicado por: Usuario Invitado en 16 Marzo 2015, 02:57 am
Hasta donde tengo entendido sobre lo que deseas hacer, lo haría así:

Código
  1. package com.company.app.model.entities;
  2.  
  3. public class Employee {
  4. private Short id;
  5. private String names;
  6. private String surnames;
  7. private Double salary;
  8.  
  9. public Employee() {}
  10.  
  11. public Employee(Short id, String names, String surnames, Double salary) {
  12. super();
  13. this.id = id;
  14. this.names = names;
  15. this.surnames = surnames;
  16. this.salary = salary;
  17. }
  18.  
  19. public Short getId() {
  20. return id;
  21. }
  22.  
  23. public void setId(Short id) {
  24. this.id = id;
  25. }
  26.  
  27. public String getNames() {
  28. return names;
  29. }
  30.  
  31. public void setNames(String names) {
  32. this.names = names;
  33. }
  34.  
  35. public String getSurnames() {
  36. return surnames;
  37. }
  38.  
  39. public void setSurnames(String surnames) {
  40. this.surnames = surnames;
  41. }
  42.  
  43. public Double getSalary() {
  44. return salary;
  45. }
  46.  
  47. public void setSalary(Double salary) {
  48. this.salary = salary;
  49. }
  50.  
  51.  
  52. }

Código
  1. package com.company.app.model.entities;
  2.  
  3. import java.util.ArrayList;
  4.  
  5. public class EmployeeList extends ArrayList<Employee> {
  6. private static final long serialVersionUID = 2924861284507271931L;
  7.  
  8. public EmployeeList() {
  9. super();
  10. }
  11.  
  12. public boolean hasRepeatProperties(Employee employee) {
  13. boolean hasRepeat = false;
  14. for(Employee e : this) {
  15. if(e.equals(employee))
  16. continue;
  17. if(compareProperties(e.getId(), employee.getId())) {
  18. hasRepeat = true;
  19. break;
  20. }
  21. else if(compareProperties(e.getNames(), employee.getNames())) {
  22. hasRepeat = true;
  23. break;
  24. }
  25. else if(compareProperties(e.getSurnames(), employee.getSurnames())) {
  26. hasRepeat = true;
  27. break;
  28. }
  29. else if(compareProperties(e.getSalary(), employee.getSalary())) {
  30. hasRepeat = true;
  31. break;
  32. }
  33. }
  34.  
  35. return hasRepeat;
  36. }
  37.  
  38. private boolean compareProperties(Object first, Object second) {
  39. boolean hasRepeat = false;
  40. if(first instanceof String) {
  41. hasRepeat = first.equals(second);
  42. }
  43. else if (first instanceof Short){
  44. hasRepeat = ((Short) first).shortValue() == ((Short) second).shortValue();
  45. }
  46. else if (first instanceof Double) {
  47. hasRepeat = ((Double) first).doubleValue() == ((Double) second).doubleValue();
  48. }
  49.  
  50. return hasRepeat;
  51. }
  52.  
  53. }

Código
  1. package com.company.app;
  2.  
  3. import java.util.Scanner;
  4.  
  5. import com.company.app.model.entities.Employee;
  6. import com.company.app.model.entities.EmployeeList;
  7.  
  8. public class Main {
  9.  
  10. public static void main(String[] args) {
  11. EmployeeList employeeList = new EmployeeList();
  12. Scanner reader = new Scanner(System.in);
  13. String option = "S";
  14.  
  15. do {
  16. Employee employee = new Employee();
  17. System.out.println("Ingrese el ID del nuevo empleado");
  18. employee.setId(Short.valueOf(reader.nextLine()));
  19. System.out.println("\nIngrese sus nombres:");
  20. employee.setNames(reader.nextLine());
  21. System.out.println("\nIngrese sus apellidos");
  22. employee.setSurnames(reader.nextLine());
  23. System.out.println("Ingrese su salario");
  24. employee.setSalary(Double.valueOf(reader.nextLine()));
  25. employeeList.add(employee);
  26. System.out.println("\n¿Desea seguir agregando empleados? S/N");
  27. option = reader.nextLine();
  28. }
  29. while(option.equalsIgnoreCase("s"));
  30. reader.close();
  31.  
  32. for(Employee employee : employeeList) {
  33. if(employeeList.hasRepeatProperties(employee))
  34. continue;
  35. System.out.println("ID del empleado: "+employee.getId());
  36. System.out.println("Nombres: "+employee.getNames());
  37. System.out.println("Apellidos: "+employee.getSurnames());
  38. System.out.println("Salario: "+employee.getSalary());
  39. }
  40.  
  41. }
  42.  
  43. }

Claro que está demás decir que tienes que manejar las excepciones que pueden ocurrir (NumberFormatException, InputMismatchException).


Título: Re: Error con char y métodos listas
Publicado por: PabloPbl en 16 Marzo 2015, 03:32 am
Hola Gus, estuve viendo un poco tu código y vi una parte en la que obtenías los datos desde la clase Scanner:

Código
  1. System.out.println("Ingrese el ID del nuevo empleado");
  2. employee.setId(Short.valueOf(reader.nextLine()));
  3. System.out.println("\nIngrese sus nombres:");
  4. employee.setNames(reader.nextLine());
  5. System.out.println("\nIngrese sus apellidos");
  6. employee.setSurnames(reader.nextLine());
  7. System.out.println("Ingrese su salario");
  8. employee.setSalary(Double.valueOf(reader.nextLine()));
  9. employeeList.add(employee);
  10. System.out.println("\n¿Desea seguir agregando empleados? S/N");
  11. option = reader.nextLine();

y la pregunta es, ¿La clase Scanner solo puede obtener un tipo de dato en particular?

¿Esto estaría mal?
Código
  1. Scanner scanner = new Scanner(System.in);
  2. String nombre = sca.nextLine();
  3. int edad = sca.nextInt();
  4.  

Y ¿Esto estaría bien?
Código
  1. Scanner scanner = new Scanner(System.in);
  2. String nombre = sca.nextLine();
  3. int edad = Integer.parseInt(sca.nextLine());
  4.  

La duda surge, por que estaba haciendo un par de cosas con esta clase y pues obtenía datos diferentes y me daba error, pero no si era por eso.


Título: Re: Error con char y métodos listas
Publicado por: Usuario Invitado en 16 Marzo 2015, 04:07 am
Ambas formas son válidas. La razón por la que uso el nextLine es por preferencia personal.

Por ejemplo, cuando lees un entero, Scannet te devuelve lo ingresado pero el enter que das se guarda en el input por lo que si seguidamente llamas a nextLine, éste método leerá lo que ha quedado en el input y el resultado es la percepción que se ha dado un enter automáticamente. Para evitar ésto debes de llamar al método nextLine solo para que lea el enter dejado por el nextInt y a continuación puedes seguir guardando Strings.

Usando solo nextLine me evito ésto y solo tendría que poner un catch para NumberFormatException.

Saludos.


Título: Re: Error con char y métodos listas
Publicado por: PabloPbl en 16 Marzo 2015, 04:32 am
Osea en vez de hacer esto:

Código
  1. Scanner scaner = new Scanner(System.in);
  2. int edad = scaner.nextInt();
  3. String nombre = scaner.nextLine();
  4.  

Si no me equivoco debería hacer esto  ;D

Código
  1. Scanner scaner = new Scanner(System.in);
  2.        int edad = scaner.nextInt();
  3.        scaner.nextLine();
  4.        String nombre = scaner.nextLine();
  5.  

Pero me gusta mas todo con nextLine y de ahí convierto todo a sus respectivos tipos.

Salu2 crack!!


Título: Re: Error con char y métodos listas
Publicado por: Usuario Invitado en 16 Marzo 2015, 04:35 am
Sí, es así como comentas. También me gusta de ese modo, se tiene un poco más de control.

Saludos ^^.


Título: Re: Error con char y métodos listas
Publicado por: Baal_30 en 16 Marzo 2015, 09:49 am
Muchas gracias a los dos :D este ejercicio ya era más complejo :/

Lo del scanner me di cuenta al probar el código jaja :P pero hice lo de otro nextLine y solucionado ;)

Gracias a los dos :)