java - 有没有办法在 Integer 对象中用 Java 中的 HashMap 值执行加法/减法?

标签 java

    public static HashMap makeHashMap() {
        HashMap<String, Integer> table = new HashMap<String, Integer>();
        table.put("C", 1);
        table.put("V", 2);
        table.put("D", 3);
        table.put("W", 4);
        table.put("E", 5);
        table.put("F", 6);
        table.put("X", 7);
        table.put("G", 8);
        table.put("Y", 9);
        table.put("A", 10);
        table.put("Z", 11);
        table.put("B", 12);
        // System.out.print(table);

        return table;
    }

    public static ArrayList<Object> makeArrayList(HashMap<String, Integer> table) {
        Object[] keys = table.keySet().toArray();
        ArrayList<Object> randomlyGeneratedNotes = new ArrayList<Object>();
        for (int i = 0; i < 83; i++) {
            Object key = keys[new Random().nextInt(keys.length)];
            //  System.out.println(key + " " + table.get(key));
            randomlyGeneratedNotes.add(key);
        }
        System.out.println(randomlyGeneratedNotes);
        return randomlyGeneratedNotes;
    }

    public static void pitchMovement(ArrayList<Object> randomlyGeneratedNotes, HashMap table) {
      Iterator<String> keySetIterator = table.keySet().iterator();
        String key = keySetIterator.next();
        int first = table.get(key);

        for (Object o : randomlyGeneratedNotes) {
            //you want to grab the values of 2 neighboring keys
            if (table.containsKey(o)) {
              //  System.out.println("true");
                Object firstNote=  table.get(key);
                System.out.println(firstNote);
            }
        }
    }
}

如何在 HashMap 值之间执行加法/减法?还是我使用了不合适的数据结构?我尝试用我的 pitchMovement 方法做一些事情,但是 int first = table.get(key); 行给出了不兼容类型的错误:

Object cannot be converted to int.

不确定这是一个简单的错误还是一个更复杂的错误。

最佳答案

我想鼓励您付出一些学习努力来理解泛型和接口(interface)。 Java 在基元类型和值类型(如 intInteger )之间的转换将是友好的,但在处理类型为 Object 的对象时表现得很愚蠢。 .您在多个地方遇到的问题是,您不必要地让强类型值降级为类型 Object .

我建议进行以下更改:

更改 public static HashMap makeHashMap()public static HashMap<String,Integer> .否则,你会得到相当于 HashMap<Object,Object> 的结果。 ,这是你不想要的。

public static ArrayList<Object> makeArrayList(HashMap<String, Integer> table) ,您正在提取 String从 HashMap 中键入键,然后将它们转换为类型 Object构建阵列时。不要更改它们的类型——将它们保留为字符串。您可能被“toArray()”转换为 Object 的数组所困扰。值。您可以使用此技术来保留类型:

    String[] keys=new String[table.size()];
    keys=table.keySet().toArray(keys);

这样做,您可以轻松更改 makeArrayList 的签名返回 String 类型的 ArrayList :

  public static ArrayList<String> makeArrayList(HashMap<String, Integer> table)

您的 pitchMovement 签名可以更改为:

  public static void pitchMovement(ArrayList<String> randomlyGeneratedNotes,
                                   HashMap<String,Integer> table)

请注意,您遇到的特定错误与 HashMap table 有关在没有通用参数的情况下定义(相当于 HashMap<Object,Object> )。

当你的类型没有减少到 Object 时,然后 Java 将使用“自动装箱”在您的 int 之间自动转换和 Integer根据需要类型。例如,以下是有效的。

    Integer x=new Integer(5);
    int y=10+x;
    Integer z=x+y;

总而言之,无论您将它们存储在何处,数学运算都将按照您的预期进行,而无需在基元及其等效值类型之间进行强制转换和转换,但是您必须努力在您使用的任何地方保留这些类型他们。

关于java - 有没有办法在 Integer 对象中用 Java 中的 HashMap 值执行加法/减法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36994316/

相关文章:

java - 使用 Samsung Remote Test Lab 时连接卡住

java - 初学者 Java(循环)- 自动售货机

java - map 的封装实现

java - 使用 Jsoup 登录 Google 帐户

java - 当线程完成/完成时在 Swing 中获取通知

java - java中将实例存储到数组中

java - 有没有办法检查 fragment 中的 popBackStack 调用

java - Spring 安全: At which point do I get to know that a user logged in?

Java TextArea 和 JScrollPane

java - 使用 Gmail Java API 使用现有凭据创建 Gmail 实例