es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Problema de conversión en el método getValue() de Hashmap.

¡Amigos! Solo tengo una pregunta un tanto complicada, parece que tengo un problema con mi última pregunta en mi tarea.

No estoy seguro de cómo explicarlo, pero por alguna razón, mientras getValue() funciona perfectamente en mi bucle for, no se conecta con mi declaración if, declarando que getValue() no se puede resolver para el tipo House. He intentado hacer un casting para activar getValue(), pero luego no me permite declarar “>” como un operador.

Error al hacer el casting: El operador “>” no está definido para el(los) argumento(s) del tipo package.House.

Lo que busca mi método es el precio de la casa vendida al final (soldPrice en mi clase) y escanea cada clave del mapa para encontrar qué clave tiene el mayor valor.

¡Aquí está el método! 🙂

    public House maxPrice(HashMap<Integer, House> obj) {
         Integer max = (Integer)obj.keySet().toArray()[0];

        for(Map.Entry<Integer, House> entry : obj.entrySet()){
          House currentHouse = entry.getValue();
          if (currentHouse.getValue() > obj.get(max).getValue()) {
              max = entry.getKey();
          } return obj.get(max);

      } return null;

}

Por alguna razón, cuando mi profesor ejecutó el mismo código, funcionó en su compilador correctamente (él tenía visualmente la misma clase), mientras que el mío (reiniciado muchas veces) no lo hace. ¿Cómo debo superar esto?

No puedo hacer un casting del objeto a un int, ni a una clase envoltorio (Integer).

¡Muchas gracias por cualquier ayuda, todo se aprecia enormemente! ¡En este momento estoy completamente bloqueado! Avísame si necesitas alguna aclaración.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Solución para el problema con getValue() en la declaración if

    Parece que getValue() no se resuelve para el tipo House en la declaración if, pero funciona perfectamente bien en el bucle for. Una posible solución para esto podría ser verificar si la clase House tiene un método para obtener el soldPrice directamente, en lugar de usar el método getValue(). Alternativamente, puedes intentar usar una variable temporal para almacenar el valor de getValue() y usarlo en la declaración if.

    Además, el mensaje de error “El operador > no está definido para el/los argumento(s) del tipo package.House” sugiere que estás tratando de comparar objetos House, lo cual no es una comparación válida. Necesitas comparar el atributo soldPrice de los objetos House en su lugar.

    Aquí tienes una versión actualizada del método maxPrice(), que utiliza una variable temporal para almacenar el valor de soldPrice y lo compara en la declaración if:

    public House maxPrice(HashMap<integer, house=""> obj) {
        Integer max = (Integer) obj.keySet().toArray()[0];
        int maxSoldPrice = obj.get(max).getSoldPrice();
    
        for (Map.Entry<integer, house=""> entry : obj.entrySet()) {
            House currentHouse = entry.getValue();
            int soldPrice = currentHouse.getSoldPrice();
            if (soldPrice > maxSoldPrice) {
                max = entry.getKey();
                maxSoldPrice = soldPrice;
            }
        }
        return obj.get(max);
    }
    

    Esto debería resolver el problema y darte la salida deseada.</integer,></integer,>

Comments are closed.