elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Error con char y métodos listas
0 Usuarios y 2 Visitantes están viendo este tema.
Páginas: [1] 2 3 Ir Abajo Respuesta Imprimir
Autor Tema: Error con char y métodos listas  (Leído 8,468 veces)
Baal_30

Desconectado Desconectado

Mensajes: 248



Ver Perfil
Error con char y métodos listas
« 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.


En línea

«La suerte es el cuidado de los detalles». -Winston Churchill
crack81

Desconectado Desconectado

Mensajes: 222



Ver Perfil
Re: Error con char y métodos listas
« Respuesta #1 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.  


En línea

Si C/C++ es el padre de los lenguajes entonces ASM es dios.
PabloPbl

Desconectado Desconectado

Mensajes: 188


Ver Perfil
Re: Error con char y métodos listas
« Respuesta #2 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.
« Última modificación: 15 Marzo 2015, 04:04 am por PabloPbl » En línea

Baal_30

Desconectado Desconectado

Mensajes: 248



Ver Perfil
Re: Error con char y métodos listas
« Respuesta #3 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 :)
En línea

«La suerte es el cuidado de los detalles». -Winston Churchill
PabloPbl

Desconectado Desconectado

Mensajes: 188


Ver Perfil
Re: Error con char y métodos listas
« Respuesta #4 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  ;)
En línea

Baal_30

Desconectado Desconectado

Mensajes: 248



Ver Perfil
Re: Error con char y métodos listas
« Respuesta #5 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? :/

En línea

«La suerte es el cuidado de los detalles». -Winston Churchill
PabloPbl

Desconectado Desconectado

Mensajes: 188


Ver Perfil
Re: Error con char y métodos listas
« Respuesta #6 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??.
En línea

PabloPbl

Desconectado Desconectado

Mensajes: 188


Ver Perfil
Re: Error con char y métodos listas
« Respuesta #7 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.  
En línea

crack81

Desconectado Desconectado

Mensajes: 222



Ver Perfil
Re: Error con char y métodos listas
« Respuesta #8 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. }
En línea

Si C/C++ es el padre de los lenguajes entonces ASM es dios.
Baal_30

Desconectado Desconectado

Mensajes: 248



Ver Perfil
Re: Error con char y métodos listas
« Respuesta #9 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 :/
En línea

«La suerte es el cuidado de los detalles». -Winston Churchill
Páginas: [1] 2 3 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
listas enlazadas - ver error
.NET (C#, VB.NET, ASP)
Choclito 3 4,580 Último mensaje 26 Agosto 2009, 18:47 pm
por raul338
ERROR excepcion: char* = char* + n « 1 2 »
Programación C/C++
x64core 10 5,618 Último mensaje 21 Enero 2012, 20:20 pm
por Eternal Idol
Error al definir array char en DEV-CPP
Programación C/C++
DA KILLER 6 3,883 Último mensaje 27 Febrero 2012, 13:39 pm
por satu
[C] Error Conversión String to Char
Programación C/C++
MeCraniDOS 3 3,179 Último mensaje 31 Marzo 2013, 18:31 pm
por avesudra
Metodos con listas
Java
rmkevs 2 2,085 Último mensaje 19 Junio 2016, 03:37 am
por hectornunezrivas
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines