Autor
|
Tema: incomparable types: contrato[] and contrato (Leído 3,996 veces)
|
juligarc10
Desconectado
Mensajes: 47
|
Hola amigos, Tengo un problema, ya que estoy intentando mostrar una serie de objetos los cuales tienen su propio toString(), pero basándome en una condición de estos, dependiendo de si tienen un tipo determinado de un enumerado. Al hacer la comparación con un if, me da error, y me muestra incomparable types: contrato[] and contrato. Aquí les dejo el código. package bloque1_2; import java.util.Scanner; /** * * @author Admin */ public class Empresa { private Empleado[] empleados; private int numEmpleados; public Empresa(int maxEmpleados){ empleados=new Empleado [maxEmpleados]; numEmpleados=0; } @Override public String toString(){ Scanner entrada=new Scanner(System.in); Empleado.Contrato contrato= Empleado.Contrato.FORMACION; for(int i=0;i<Empleado.Contrato.values().length;i++){ System.out.println("Introduzca "+i+" si quiere mostrar los empleados de tipo "+ Empleado.Contrato.values()[i]); } int opcion=Integer.parseInt(entrada.nextLine()); contrato=Empleado.Contrato.values()[opcion]; for (int j=0;j<numEmpleados;j++){ if(empleados[j].Contrato.values()==contrato){ } } } } Este último if es el que me da error. Gracias de antemano y un saludo.
|
|
|
En línea
|
|
|
|
rub'n
Desconectado
Mensajes: 1.217
(e -> λ("live now")); tatuar -> λ("α");
|
Postea los enum aquí a ver cómo los tienes.
|
|
|
En línea
|
If you don't have time to read, you don't have the time (or the tools) to write, Simple as that. Stephen king
|
|
|
juligarc10
Desconectado
Mensajes: 47
|
Aquí los dejo amigo. Gracias. package bloque1_2;
/** * * @author Admin */ public class Empleado { public static enum Contrato{INDEFINIDO, TEMPORAL, FORMACION, PRACTICAS}; private int dni; private String nombre; private int salario; private Contrato contrato; public Empleado(int documento, String name, int dinero, Contrato contrato){ dni=documento; nombre=name; salario=dinero; this.contrato=contrato; } public int getDni(){ return dni; } public void setDni(int documento){ dni=documento; }
public String getNombre() { return nombre; }
public int getSalario() { return salario; }
public Contrato getContrato() { return contrato; }
public void setNombre(String nombre) { this.nombre = nombre; }
public void setSalario(int salario) { this.salario = salario; }
public void setContrato(Contrato contrato) { this.contrato = contrato; } public String toString(){ StringBuilder toret=new StringBuilder(); toret.append("/nEl nombre del empleado es ").append(nombre) .append("/n El dni del empleado es ").append(dni) .append("/n Su salario es ").append(salario) .append("/n Su tipo de contrato es ").append(contrato); return toret.toString(); } }
|
|
|
En línea
|
|
|
|
juligarc10
Desconectado
Mensajes: 47
|
Postea los enum aquí a ver cómo los tienes.
Hecho.
|
|
|
En línea
|
|
|
|
rub'n
Desconectado
Mensajes: 1.217
(e -> λ("live now")); tatuar -> λ("α");
|
Cuando llegue a la guarida, te ayudo dog, ese enum Contrato es mejor desarrollarlode otra manera, con un método estático dentro que consulte, si posee esa constante o no, logrando mayor legibilidad, que como lo estás haciendo , es un mero desastre
|
|
« Última modificación: 13 Marzo 2019, 20:50 pm por rub'n »
|
En línea
|
If you don't have time to read, you don't have the time (or the tools) to write, Simple as that. Stephen king
|
|
|
spcruzaley
Desconectado
Mensajes: 16
|
Que tal Rub'n Antes de nada, veo que tu variable numEmpleados la seteas a cero, imagino que solo es para pruebas o en alguna otra parte seteas algun valor, cierto? porque de otra manera nunca entrara a tu for. Por otra parte, como bien comenta juligarc10, ese enum puede tener una mayor legibilidad si generas un metodo que se encargue de hacer algo mas especifico, igual por lo pronto podrias cambiar el for por esto: for (Empleado.Contrato ctr : Empleado.Contrato.values()) { if (ctr.equals(contrato)) { //Do something } }
Saludos. SPCruzaley
|
|
|
En línea
|
|
|
|
rub'n
Desconectado
Mensajes: 1.217
(e -> λ("live now")); tatuar -> λ("α");
|
spcruzaley tal cual dog, por ahí iba la cosa saludos. public enum Contrato { INDEFINIDO("indefinido"), TEMPORAL("temporal"), FORMACION("formacion"), PRACTICAS("practicas"); Contrato (final String value ) { this.value = value; } return value; } public static Contrato getContrato (final String tipoContrato ) { Contrato contrato = null; for(final Contrato tmp : Contrato.values()) { /** * a lowercase para coincidir con las constantes */ if(tmp.getValue().equals(tipoContrato.toLowerCase())) { contrato = tmp; break;// se sale de las iteracioes con la primera coincidencia } } return contrato; } }
/** * */ public class Empresa { private static final Logger LOGGER = Logger.getLogger(Empresa.class.getSimpleName()); private static final Scanner LEER = new Scanner (System. in); public Empresa() { try { LOGGER.info("Introduce Tipo de contrato :D"); this.tipo = LEER.nextLine(); final Contrato contrato = Contrato.getContrato(tipo); switch (contrato) { case TEMPORAL: LOGGER.info("Temporal"); break; case FORMACION: LOGGER.info("Formacion"); break; case PRACTICAS: LOGGER.info("Practicas"); break; case INDEFINIDO: LOGGER.info("Indefinido"); break; } LOGGER.severe("No existe " + this.tipo); } } @Override return "Lo que quieres hacer aqui esta medio bull$shit, pero si quieres explicate mejor XD"; } public static void main (String... blalb) { new Empresa(); } }
|
|
|
En línea
|
If you don't have time to read, you don't have the time (or the tools) to write, Simple as that. Stephen king
|
|
|
WHK
|
Tienes una excepción al intentar utilizar un índice inexistente: for (int j=0;j<numEmpleados;j++){ if(empleados[j].Contrato.values()==contrato){ } } Si la cantidad de empleados es 0, entonces no puedes ir a buscar el índice cero porque no existe. Hay que añadir un -1 a numEmpleados y hacer una condicional que diga que si la cantidad es mayor que cero entonces ir a hacer el recorrido del for. También te recomiendo utilizar una lista en ves de un array ya que Java lo maneja de mejor manera, de hecho los repositorios Crud utilizan listas en ves de arrays, puedes llamar funciones para validar si estan vacias, obtener y buscar índices, etc. Saludos.
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
El Contrato.- Acepto
« 1 2 »
Foro Libre
|
Ad0nis
|
10
|
4,849
|
27 Julio 2011, 07:23 am
por flacc
|
|
|
Samsung podría firmar un contrato con el FBI
Noticias
|
Mister12
|
1
|
2,680
|
21 Julio 2013, 01:20 am
por Jenag
|
|
|
Contrato de servicios de Microsoft
Foro Libre
|
satinado
|
2
|
1,652
|
9 Agosto 2014, 20:40 pm
por satinado
|
|
|
Contrato
Ingeniería Inversa
|
Saskoso
|
1
|
2,543
|
7 Marzo 2017, 14:10 pm
por Geovane
|
|
|
Microsoft gana el controvertido contrato por el Proyecto YEDI
Noticias
|
wolfbcn
|
0
|
1,563
|
29 Octubre 2019, 01:17 am
por wolfbcn
|
|