0

我在整理此代码时遇到了一些麻烦,该代码位于哈希图中 - 我还需要一些帮助来整理双(价格)的类似代码集。谢谢你。

@SuppressWarnings("unused")
public class Inventory {

    Scanner in = new Scanner(System.in);
    ArrayList<Sellable> groceries;
    HashMap<String, Integer> stock;

    public Inventory() {
        groceries = new ArrayList<Sellable>();
        stock = new HashMap<String, Integer>();
//HARDCODING...:
        Sellable n1 = new Produce("Corn", 3, 5.00);
        Sellable n2 = new Snack("Natural Popcorn Seeds", 2.50);
        Sellable n3 = new Produce("Potatoes", 3, 5.00);
        Sellable n4 = new Snack("Organic Potato Chips", 2.50);
        Sellable n5 = new Produce("Apples", 5, 1.75);
        Sellable n6 = new Snack("Apple Juice - 128 oz.", 3.50);
        Sellable n7 = new Produce("Oranges", 5, 1.75);
        Sellable n8 = new Snack("Orange Juice - 128 oz.", 3.50);
//ADD TO HASHMAP
        groceries.add(n1);
        groceries.add(n2);
        groceries.add(n3);
        groceries.add(n4);
        groceries.add(n5);
        groceries.add(n6);
        groceries.add(n7);
        groceries.add(n8);
//PUT UP FOR PRINTING
        stock.put(n1.getName(), 50);
        stock.put(n2.getName(), 100);
        stock.put(n3.getName(), 50);
        stock.put(n4.getName(), 100);
        stock.put(n5.getName(), 50);
        stock.put(n6.getName(), 100);
        stock.put(n7.getName(), 50);
        stock.put(n8.getName(), 100);
    }

//Sorting Method 1
    @SuppressWarnings("unchecked")
    public void sortByName() {
        groceries = new ArrayList<Sellable>();
        stock = new HashMap<String, Integer>();
        {
            if (stock != null) {
                List<Sellable> groceries = new ArrayList<Sellable>();
                stock.addAll(((Entry<String, Integer>) stock).getValue(), groceries);
                Collections.sort(groceries, new Comparator<Sellable>() {
                    public int compare(Sellable product1, Sellable product2) {
                        try {
                            Sellable choice1 = (Sellable) product1;
                            Sellable choice2 = (Sellable) product2;
                            //LESS THAN
                            if (choice1.getName().compareTo(choice2.getName()) < 0) {
                                return -1;
                            } //GREATER THAN
                            else if (choice1.getName().compareTo(choice2.getName()) > 0) {
                                return 1;
                            } //EQUALS
                            else {
                                return 0;
                            }
                        } catch (ClassCastException FAIL) {
                            return -2;
                        }
                    }
                });
            }
        }
    }
}
4

3 回答 3

0

Please remove the lines of code,

groceries = new ArrayList<Sellable>();

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

from your mehod sortByName().

This lines reset the groceries and stock to empty.

于 2013-11-11T16:32:00.980 回答
0

考虑添加新答案而不是编辑我以前的答案。

请注意,除非确实需要,否则不应(重新)初始化方法中的成员变量。我还使用 String.compareTo() 来比较名称。

请在下面找到修改后的排序方法:

    @SuppressWarnings("unchecked")
    public void sortByName() {
//        groceries = new ArrayList<Sellable>();
//        stock = new HashMap<String, Integer>();

            if (stock != null) {
                //List<Sellable> groceries = new ArrayList<Sellable>();
                //stock.addAll(((Entry<String, Integer>) stock).getValue(), groceries);
                Collections.sort(groceries, new Comparator<Sellable>() {
                    public int compare(Sellable product1, Sellable product2) {
                        try {
                            return product1.getName().compareTo(product2.getName());

                        } catch (Exception FAIL) {
                            return -2;
                        }
                    }
                });
            }
        }

}
于 2013-11-16T12:41:25.290 回答
0

抱歉,但是您的代码或您的问题对我来说都没有多大意义。

  • sortByName正在破坏groceriesstock

  • 然后它显然试图从(现在)空的 HashMap 复制到 ArrayList。但这是荒谬的,因为

    • 您正在尝试使用不存在的方法 ( HashMap.addAll),

    • 您正在将 a 投射HashMap到 a Entry

    • 等等。

  • Comparator按名称”排序看起来似乎是合理的,但是在发生 ClassCastException 时返回 -2 的代码是错误的。你应该让异常传播......如果它出现。您实际上并没有在比较器中进行类型转换。参数具有正确的类型。(将 aSellable转换为 a Sellable?为什么 ???)

于 2013-11-11T16:36:16.400 回答