ClassCastException в Hashmap для целых чисел

Кто-нибудь знает, как исправить эту ошибку ClassCastException? Я получаю: "Исключение в потоке"main" java.lang.ClassCastException: java.util.HashMap$ Запись не может быть приведена к java.lang.Integer?

моя проблема в том, что я думал, что я звоню целое число в этом месте, но, видимо, нет? это задание должно быть выполнено в течение 2 часов, поэтому любая помощь приветствуется. Комментарии должны рассказать, что происходит.

public class WhyHellothere {
public static void main(String[] args) {
    Scanner s = new Scanner(System.in);
    process(s);
}

public static void process(Scanner s) {
    HashMap hashmapofpricing = new HashMap();
    HashMap hashmapofcount = new HashMap();
    for (int i = 0; i < 1; i = 0) {
    String itemDescription;
        int count;
        double unitPrice;

        if ((itemDescription = s.next()).equals("end")) {
            break;
        }
        count = s.nextInt();
        Integer quantityValue;

        if (hashmapofcount.get(itemDescription) != null) {

            quantityValue = (Integer) hashmapofcount.get(itemDescription);
        } else {

            quantityValue = new Integer(0);
        }

        hashmapofcount.put(itemDescription, new Integer(new Integer(count).intValue()
                + quantityValue.intValue()));
        unitPrice = s.nextDouble() * count;
        Double costValue; 

        if (hashmapofpricing.get(itemDescription) != null) { 
           costValue = (Double) hashmapofpricing.get(itemDescription);
        } else {
            costValue = new Double(0); 
        }

        hashmapofpricing.put(itemDescription, new Double(new Double(unitPrice).doubleValue()
                + costValue.doubleValue()));
    }
    Object itemdescription[] = hashmapofcount.entrySet().toArray();
    Object howmanytimestheitemappears[] = hashmapofcount.entrySet().toArray();
    int countIteration=0;
    Object pricing[] = hashmapofpricing.entrySet().toArray();
    int priceIteration=0;
    Integer runningmaxamount = new Integer(0); 
    for (int i = 0; i < howmanytimestheitemappears.length; i++) {
    int q = (Integer)howmanytimestheitemappears[i];//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<this is where the ClassCastException is. No idea why or how to fix.
        if (q > runningmaxamount.intValue()) {runningmaxamount = q;countIteration = i;
        }
    }
    Double maxcost = new Double(0);
    for (int i = 0; i < pricing.length; i++) {
        Double d = (Double) pricing[i];
        if (d.doubleValue() > maxcost.doubleValue()) {
            maxcost = d;
            priceIteration = i;
        }
    }
    String largestCountItem = (String) itemdescription[countIteration];
    String largestCostItem = (String) itemdescription[priceIteration];
    System.out.println("The largest count item with "
            + runningmaxamount.intValue() + " was: " + largestCountItem);
    System.out.println("The largest total cost item at "
            + maxcost.doubleValue() + " was: " + largestCostItem);
}

}

2 ответа

Решение

Прежде всего, у вас проблема с объявлением и инициализацией HashMap:

Лучше указать, какие типы вы храните в своей хэш-карте:

HashMap<String, Integer> hashmapofcount = new HashMap<String, Integer>();

Тогда вы можете легко пройти через этот цикл:

   for (Map.Entry<String,Integer> entry : hashmapofcount.entrySet()) {
        final String description = entry.getKey();
        final Integer value = entry.getValue();
    }

PS: и вам не нужно много boxing целое число и двойные, что делает ваш код немного ужасным. Еще одна вещь, которую вы добавляете два целых числа и удваивает unitPrice и costValue, я думаю, что вы можете объединить их, используя unitPrice+" "+costValue(?)

Object howmanytimestheitemappears[] = hashmapofcount.entrySet().toArray();
for (int i = 0; i < howmanytimestheitemappears.length; i++) {
    int q = (Integer)howmanytimestheitemappears[i];/
....
}

howmanytimestheitemappears[i] имеет тип HashMap$Entry. Чтобы получить ключ нужно позвонить howmanytimestheitemappears[i].getKey()Прочитайте http://docs.oracle.com/javase/7/docs/api/java/util/Map.Entry.html.

Другие вопросы по тегам