Autor
|
Tema: Error con char y métodos listas (Leído 8,541 veces)
|
PabloPbl
Desconectado
Mensajes: 188
|
^^ exactamente es así como dices xD En cuanto al método repetido, si que lo llama para hacer comprobaciones con el if: if(!repetido(empleados, nombre, sueldo)){ empleados.add(new Empleado(nombre, sueldo)); }
Ya que ese método devuelve un boolean y sirve para validar. Salu2.
|
|
|
En línea
|
|
|
|
Baal_30
Desconectado
Mensajes: 248
|
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?
|
|
|
En línea
|
«La suerte es el cuidado de los detalles». -Winston Churchill
|
|
|
PabloPbl
Desconectado
Mensajes: 188
|
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.
|
|
|
En línea
|
|
|
|
Baal_30
Desconectado
Mensajes: 248
|
Voy a probar! okey cualquier duda te comento Muchas gracias
|
|
|
En línea
|
«La suerte es el cuidado de los detalles». -Winston Churchill
|
|
|
Baal_30
Desconectado
Mensajes: 248
|
No me aclaro :/ He modificado así el código del for para imprimir: for(int i=0;i<empleados.size();i++){ if(repetido(empleados, empleados.get(i).getNombre(), empleados.get(i).getSueldo())){ System. out. println("Empleado "+empleados. get(i ). getNombre()+" sueldo "+empleados. get(i ). getSueldo()); } }
Y el método lo he dejado así : public static boolean repetido (ArrayList <Empleado > empleados, String nombre, int sueldo ){ for(int i=0;i<empleados.size();i++){ if((empleados.get(i).getNombre().equals(nombre)) || (empleados.get(i).getSueldo()==sueldo)){ return false; } } return true; }
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 :/
|
|
|
En línea
|
«La suerte es el cuidado de los detalles». -Winston Churchill
|
|
|
PabloPbl
Desconectado
Mensajes: 188
|
Mira este Código: Clase 1: 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 String[] empleadosImprimidos = new String[empleados. size()]; 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; } } if(mostrarEmpleadoActual == true) { for(int i3 = 0; i3 < empleadosImprimidos.length; i3++) { if(empleados.get(i).getNombre().equals(empleadosImprimidos[i3])) { 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(); empleadosImprimidos[i] = empleados.get(i).getNombre(); empleados.get(i).get(); } } } }
Clase Empleado: 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"); } } public int getSueldo() { return this.sueldo; } return this.nombre; } }
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.
|
|
|
En línea
|
|
|
|
PabloPbl
Desconectado
Mensajes: 188
|
Te he enviado un MP .
|
|
|
En línea
|
|
|
|
Usuario Invitado
Desconectado
Mensajes: 625
|
Hasta donde tengo entendido sobre lo que deseas hacer, lo haría así: package com.company.app.model.entities; public class Employee { public Employee() {} super(); this.id = id; this.names = names; this.surnames = surnames; this.salary = salary; } return id; } public void setId (Short id ) { this.id = id; } return names; } public void setNames (String names ) { this.names = names; } return surnames; } public void setSurnames (String surnames ) { this.surnames = surnames; } return salary; } public void setSalary (Double salary ) { this.salary = salary; } }
package com.company.app.model.entities; import java.util.ArrayList; public class EmployeeList extends ArrayList<Employee> { private static final long serialVersionUID = 2924861284507271931L; public EmployeeList() { super(); } public boolean hasRepeatProperties(Employee employee) { boolean hasRepeat = false; for(Employee e : this) { if(e.equals(employee)) continue; if(compareProperties(e.getId(), employee.getId())) { hasRepeat = true; break; } else if(compareProperties(e.getNames(), employee.getNames())) { hasRepeat = true; break; } else if(compareProperties(e.getSurnames(), employee.getSurnames())) { hasRepeat = true; break; } else if(compareProperties(e.getSalary(), employee.getSalary())) { hasRepeat = true; break; } } return hasRepeat; } private boolean compareProperties (Object first, Object second ) { boolean hasRepeat = false; hasRepeat = first.equals(second); } else if (first instanceof Short){ hasRepeat = ((Short) first ). shortValue() == ((Short) second ). shortValue(); } else if (first instanceof Double) { hasRepeat = ((Double) first ). doubleValue() == ((Double) second ). doubleValue(); } return hasRepeat; } }
package com.company.app; import java.util.Scanner; import com.company.app.model.entities.Employee; import com.company.app.model.entities.EmployeeList; public class Main { public static void main (String[] args ) { EmployeeList employeeList = new EmployeeList(); Scanner reader = new Scanner (System. in); do { Employee employee = new Employee(); System. out. println("Ingrese el ID del nuevo empleado"); employee. setId(Short. valueOf(reader. nextLine())); System. out. println("\nIngrese sus nombres:"); employee.setNames(reader.nextLine()); System. out. println("\nIngrese sus apellidos"); employee.setSurnames(reader.nextLine()); System. out. println("Ingrese su salario"); employee. setSalary(Double. valueOf(reader. nextLine())); employeeList.add(employee); System. out. println("\n¿Desea seguir agregando empleados? S/N"); option = reader.nextLine(); } while(option.equalsIgnoreCase("s")); reader.close(); for(Employee employee : employeeList) { if(employeeList.hasRepeatProperties(employee)) continue; System. out. println("ID del empleado: "+employee. getId()); System. out. println("Nombres: "+employee. getNames()); System. out. println("Apellidos: "+employee. getSurnames()); System. out. println("Salario: "+employee. getSalary()); } } }
Claro que está demás decir que tienes que manejar las excepciones que pueden ocurrir (NumberFormatException, InputMismatchException).
|
|
|
En línea
|
"La vida es muy peligrosa. No por las personas que hacen el mal, si no por las que se sientan a ver lo que pasa." Albert Einstein
|
|
|
PabloPbl
Desconectado
Mensajes: 188
|
Hola Gus, estuve viendo un poco tu código y vi una parte en la que obtenías los datos desde la clase Scanner: System. out. println("Ingrese el ID del nuevo empleado"); employee. setId(Short. valueOf(reader. nextLine())); System. out. println("\nIngrese sus nombres:"); employee.setNames(reader.nextLine()); System. out. println("\nIngrese sus apellidos"); employee.setSurnames(reader.nextLine()); System. out. println("Ingrese su salario"); employee. setSalary(Double. valueOf(reader. nextLine())); employeeList.add(employee); System. out. println("\n¿Desea seguir agregando empleados? S/N"); option = reader.nextLine();
y la pregunta es, ¿La clase Scanner solo puede obtener un tipo de dato en particular? ¿Esto estaría mal? Scanner scanner = new Scanner (System. in);String nombre = sca. nextLine(); int edad = sca.nextInt();
Y ¿Esto estaría bien? Scanner scanner = new Scanner (System. in);String nombre = sca. nextLine(); int edad = Integer. parseInt(sca. nextLine());
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.
|
|
|
En línea
|
|
|
|
Usuario Invitado
Desconectado
Mensajes: 625
|
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.
|
|
|
En línea
|
"La vida es muy peligrosa. No por las personas que hacen el mal, si no por las que se sientan a ver lo que pasa." Albert Einstein
|
|
|
|
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
|
|