是否有一种方法可以在整数对象之间使用Java中的HashMap值执行加法/减法? publicstatichashmap makeHashMap(){ HashMap table=新的HashMap(); 表.付诸表决(“C”,1); 表1.put(“V”,2); 表.付诸表决(“D”,3); 表1.put(“W”,4); 表.付诸表决(“E”,5); 表.付诸表决(“F”,6); 表1.put(“X”,7); 表.put(“G”,8); 表1.put(“Y”,9); 表.付诸表决(“A”,10); 表.put(“Z”,11); 表.付诸表决(“B”,12); //系统输出打印(表格); 返回表; } 公共静态ArrayList MakeArayList(HashMap表){ Object[]keys=table.keySet().toArray(); ArrayList randomlyGeneratedNotes=新建ArrayList(); 对于(int i=0;i

是否有一种方法可以在整数对象之间使用Java中的HashMap值执行加法/减法? publicstatichashmap makeHashMap(){ HashMap table=新的HashMap(); 表.付诸表决(“C”,1); 表1.put(“V”,2); 表.付诸表决(“D”,3); 表1.put(“W”,4); 表.付诸表决(“E”,5); 表.付诸表决(“F”,6); 表1.put(“X”,7); 表.put(“G”,8); 表1.put(“Y”,9); 表.付诸表决(“A”,10); 表.put(“Z”,11); 表.付诸表决(“B”,12); //系统输出打印(表格); 返回表; } 公共静态ArrayList MakeArayList(HashMap表){ Object[]keys=table.keySet().toArray(); ArrayList randomlyGeneratedNotes=新建ArrayList(); 对于(int i=0;i,java,Java,如何在HashMap值之间执行加法/减法?还是我使用了不合适的数据结构?我尝试了我的pitchMovement方法,但是int first=table.get(key)行给出了不兼容类型的错误: 对象无法转换为int 不确定这是一个简单的错误还是更复杂的错误 试试看 整数优先=table.get(键) 由于表是字符串和整数的映射,所以可以将值设置为整数。 然后可以将整数变量转换为int。试试看 整数优先=table.get(键) 由于表是字符串和整数的映射,所以可以将值设置为整数。 然后,您可以

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

对象无法转换为int

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

试试看 整数优先=table.get(键)

由于表是字符串和整数的映射,所以可以将值设置为整数。 然后可以将整数变量转换为int。

试试看 整数优先=table.get(键)

由于表是字符串和整数的映射,所以可以将值设置为整数。
然后,您可以将整数变量转换为int。

您需要使用通用参数更新方法签名:

    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);
            }
        }
    }
}
publicstaticvoidpitchmovement(arraylistrandolygeneratednotes,HashMap表)

您需要使用通用参数更新方法签名:

    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);
            }
        }
    }
}
publicstaticvoidpitchmovement(arraylistrandolygeneratednotes,HashMap表)

我想鼓励您在理解泛型和接口方面投入一些学习努力。Java在原语和值类型(如
int
Integer
)之间的转换将非常友好,但在处理
Object
类型的对象时,它会装聋作哑。您在多个地方遇到的问题是,您不必要地让强类型值降级为type
Object

我建议进行以下修改:

public static HashMap makeHashMap()
更改为
public static HashMap
。否则,您将返回您不想要的等价的
HashMap

publicstaticarraylistmakearraylist(HashMap表)
中,您从HashMap提取
字符串
类型键,然后在构建数组时将它们转换为type
对象
。不要更改它们的类型--将它们保留为字符串。转换为
对象
值数组的“toArray()”可能会抛出您。可以使用此技术保留类型:

public static void pitchMovement(ArrayList<Object> randomlyGeneratedNotes, HashMap<String, Integer> table)
这样,您可以轻松地更改
makeArrayList
的签名,以返回类型为
String
的ArrayList:

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

总之,数学运算将按预期工作,而无需在原语及其等效值类型之间进行强制转换和转换,无论存储在何处,但是,无论在何处使用这些类型,您都必须努力保持它们的完整性。

我鼓励您在理解泛型和接口方面投入一些学习努力。Java在原语和值类型(如
int
Integer
)之间的转换将非常友好,但在处理
Object
类型的对象时,它会装聋作哑。您在多个地方遇到的问题是,您不必要地让强类型值降级为type
Object

我建议进行以下修改:

public static HashMap makeHashMap()
更改为
public static HashMap
。否则,您将返回您不想要的等价的
HashMap

publicstaticarraylistmakearraylist(HashMap表)
中,您从HashMap提取
字符串
类型键,然后在构建数组时将它们转换为type
对象
。不要更改它们的类型--将它们保留为字符串。转换为
对象
值数组的“toArray()”可能会抛出您。可以使用此技术保留类型:

public static void pitchMovement(ArrayList<Object> randomlyGeneratedNotes, HashMap<String, Integer> table)
这样,您可以轻松地更改
makeArrayList
的签名,以返回类型为
String
的ArrayList:

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

总之,数学运算将按预期工作,而无需在原语及其等效值类型之间进行强制转换和转换,无论存储在何处,但是,无论在何处使用这些类型,您都必须努力将它们保留下来。

您实际上是在HashMap中存储整数对象,而不是int。您只能在HashMap中存储对象。您可以使用intValue()函数将其强制转换或转换为int。不要返回原始的
HashMap
!将
HashMap makeHashMap()
更改为
HashMap makeHashMap()