Autor
|
Tema: Error con char y métodos listas (Leído 8,542 veces)
|
Baal_30
Desconectado
Mensajes: 248
|
Muy buenas, estoy aquí de nuevo con más dudas :/ Tengo este código : public static void main (String[] args ) { ArrayList<Empleado> empleados = new ArrayList<Empleado>(); Scanner S = new Scanner (System. in); do{ char respuesta = 'S'; System. out. print("Introduce el nombre del empleado: "); System. out. print("Introduce su sueldo: "); int sueldo = S.nextInt(); empleados.add(Empleado(nombre, sueldo)); System. out. println("¿Quieres añadir algún empleado más? (S/N)"); resp = S.nextLine(); resp = resp.toUpperCase(); respuesta = (char)resp.charAt(0); }while(respuesta=='S'); for(Empleado empl : empleados){ empleados.get(empl); }
Tengo una clase llamada Empleado con este constructor : private int sueldo; public Empleado (String nombre, int sueldo ){ this.nombre = nombre; this.sueldo = sueldo; }
Y me da error en : 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
Mensajes: 222
|
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 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 public class Testeo { /** * @param args the command line arguments */ public static void main (String[] args ) { ArrayList<Empleado> empleados = new ArrayList<Empleado>(); Scanner S = new Scanner (System. in); char respuesta = 'S'; do{ System. out. print("Introduce el nombre del empleado: "); System. out. print("Introduce su sueldo: "); int sueldo = S.nextInt(); S.nextLine();//despues de usar el S.nextInt(); al teclear enter el valor se que da en el limbo //por lo cual es recomendable hacer un S.nextline(); antes del siguiente S.nextline(); empleados.add(new Empleado(nombre, sueldo));//tienes que añadir un nuevo objeto cada vez que agreges //un empleado a la lista System. out. println("¿Quieres añadir algún empleado más? (S/N)"); resp = S.nextLine(); resp = resp.toUpperCase(); respuesta = (char)resp.charAt(0); }while(respuesta=='S'); for(int i=0;i<empleados.size();i++){ System. out. println(empleados. get(i ). toString());//el empleados get pide un entero no un objeto caso como lo tenias antes } } }
|
|
|
En línea
|
Si C/C++ es el padre de los lenguajes entonces ASM es dios.
|
|
|
PabloPbl
Desconectado
Mensajes: 188
|
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: import java.util.ArrayList; import java.util.Scanner; public class Clase1 { public static void main (String[] args ) { ArrayList<Empleado> empleados = new ArrayList<Empleado>(); Scanner s = new Scanner (System. in); while(true) { System. out. print("Introduce el nombre del empleado: "); System. out. print("Introduce su sueldo: "); int sueldo = s.nextInt(); empleados.add(new Empleado(nombre, sueldo)); System. out. println("¿Quieres añadir algún empleado más? (S/N)"); if(respuesta.equalsIgnoreCase("n")) { break; } } for(int i = 0; i < empleados.size(); i++){ empleados.get(i).get(); } } }
Y esta es la clase Empleado, mira que he creado mi método get. class Empleado { private int sueldo; public Empleado (String nombre, int sueldo ){ this.nombre = nombre; this.sueldo = sueldo; } public void get() { if(sueldo > 1) { System. out. println("Este empleado se llama "+this. nombre+" y su sueldo es de "+this. sueldo+" dolares por mes"); } else if(sueldo >0) { System. out. println("Este empleado se llama "+this. nombre+" y su sueldo es de "+this. sueldo+" dolar por mes"); } else{ System. out. println("Este empleado se llama "+this. nombre+" y no tiene sueldo"); } } }
Salu2.
|
|
« Última modificación: 15 Marzo 2015, 04:04 am por PabloPbl »
|
En línea
|
|
|
|
Baal_30
Desconectado
Mensajes: 248
|
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 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
Mensajes: 188
|
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:
Si yo quisiera obtener algo del array lo haría así: 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: 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: import java.util.ArrayList; import java.util.Scanner; public class Clase1 { public static void main (String[] args ) { ArrayList<Empleado> empleados = new ArrayList<Empleado>(); Scanner s = new Scanner (System. in); while(true) { System. out. print("Introduce el nombre del empleado: "); System. out. print("Introduce su sueldo: "); int sueldo = s.nextInt(); empleados.add(new Empleado(nombre, sueldo)); System. out. println("¿Quieres añadir algún empleado más? (S/N)"); if(respuesta.equalsIgnoreCase("n")) { break; } } int[] valores = new int[empleados.size()];//En este array vamos guardando todos los valores de los empleados a medida que lo mostramos for(int i = 0; i < empleados.size(); i++){//Recorremos todos los empleados agregados boolean mostrarEmpleadoActual = true;//Inidicamos si mostramos el usuario actual o no //Este ciclo se fija si el empleado actual tiene el mismo sueldo que otro empleado, si es asi cambia el valor de la variable //mostrarEmpleadoActual por false for (int i2 = 0; i2 < valores.length; i2++) { if(empleados.get(i).getSueldo() == valores[i2]) { mostrarEmpleadoActual = false; break; } } //Se fija el valor de la variable mostrarEmpleadoActual, si es verdadero mostramos el empleado if(mostrarEmpleadoActual) { valores[i] = empleados.get(i).getSueldo(); empleados.get(i).get(); } } } }
Lo único que he hecho acá fue cambiar agregar un array de int y modificar totalmente el ciclo for del final. public int getSueldo() { return this.sueldo; }
Este metodo deberás agregarlo a la clase Empleado. Si no entiendes algo, comenta la duda. Salu2
|
|
|
En línea
|
|
|
|
Baal_30
Desconectado
Mensajes: 248
|
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
Mensajes: 188
|
Cuando yo estoy haciendo esto: 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: Empleado empleado1 = new Empleado("Baal_30", 4000); empleado1.get();
Acá estoy creando un objeto y abajo estoy haciendo referencia al objeto creado y llamando a su metodo. 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
Mensajes: 188
|
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: Empleado empleado1 = new Empleado("Baal_30", 4000); empleado1.get();
y asi se haria con un arrayList: array.add(new Empleado("Baal_30", 4000)); array.get(0).get();
|
|
|
En línea
|
|
|
|
crack81
Desconectado
Mensajes: 222
|
creo que este codigo resuelve tus dudas no repite ni sueldos ni nombre o si no vuelve a plantear tu pregunta import java.util.ArrayList; import java.util.Scanner; /** * * @author bdwong */ public class Testeo { public static boolean repetido (ArrayList <Empleado > data, String nombre, int sueldo ){ for(int i=0;i<data.size();i++){ if((data.get(i).getNombre().equals(nombre)) || (data.get(i).getSueldo()==sueldo)){ return true; } } return false; } /** * @param args the command line arguments */ public static void main (String[] args ) { ArrayList<Empleado> empleados = new ArrayList<Empleado>(); Scanner s = new Scanner (System. in); while(true) { System. out. println("Introduce el nombre del empleado: "); System. out. println("Introduce su sueldo: "); int sueldo = s.nextInt(); s.nextLine(); if(!repetido(empleados, nombre, sueldo)){ empleados.add(new Empleado(nombre, sueldo)); } System. out. println("¿Quieres añadir algún empleado más? (S/N)"); s.nextLine(); if(respuesta.equalsIgnoreCase("n")) { break; } } for(int i=0;i<empleados.size();i++){ System. out. println("Empleado "+empleados. get(i ). getNombre()+" sueldo "+empleados. get(i ). getSueldo()); } } }
public class Empleado { private int sueldo; return nombre; } public int getSueldo() { return sueldo; } public Empleado (String nombre, int sueldo ){ this.nombre = nombre; this.sueldo = sueldo; } }
|
|
|
En línea
|
Si C/C++ es el padre de los lenguajes entonces ASM es dios.
|
|
|
Baal_30
Desconectado
Mensajes: 248
|
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
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
listas enlazadas - ver error
.NET (C#, VB.NET, ASP)
|
Choclito
|
3
|
4,597
|
26 Agosto 2009, 18:47 pm
por raul338
|
|
|
ERROR excepcion: char* = char* + n
« 1 2 »
Programación C/C++
|
x64core
|
10
|
5,650
|
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,903
|
27 Febrero 2012, 13:39 pm
por satu
|
|
|
[C] Error Conversión String to Char
Programación C/C++
|
MeCraniDOS
|
3
|
3,205
|
31 Marzo 2013, 18:31 pm
por avesudra
|
|
|
Metodos con listas
Java
|
rmkevs
|
2
|
2,105
|
19 Junio 2016, 03:37 am
por hectornunezrivas
|
|