Hashmap错误:不兼容的类型

时间:2013-10-07 16:53:26

标签: java hashmap bluej

我制作了一个散列图,将罗马数字作为键存储,将十进制数作为值存储。错误说“不兼容的类型 - 找到了java.lang.Object但是期望的int”。当我写“conversions.get(numOne.charAt(x));”时,我只是想获取罗马数字的值。我在这里做错了什么?

    import java.util.Scanner;
    import java.util.HashMap;

    public class test
    {
        static Scanner sc = new Scanner(System.in);
        static HashMap conversions = new HashMap();
        public static void main(String args[]){
            conversions.put('I',1);
            conversions.put('V',5);
            conversions.put('X',10);
            conversions.put('L',50);
            conversions.put('C',100);
            conversions.put('D',500);
            conversions.put('M',1000);

            String numOne = "XIX";

            for(int x = 0; x <= numOne.length()-2; x++){
                int temp1 = conversions.get(numOne.charAt(x));
                int temp2 = conversions.get(numOne.charAt(x+1));
            }
        }
    }

5 个答案:

答案 0 :(得分:4)

更改行:

static HashMap conversions = new HashMap();

static Map<Character,Integer> conversions = new HashMap<Character,Integer>();

或者从Java 7开始,我们可以通过执行以下操作来避免一些重复

static Map<Character,Integer> conversions = new HashMap<>();

总而言之,这会自动停止你的原语并解决你的问题

答案 1 :(得分:1)

正确使用泛型,您可以告诉Java HashMap应该包含哪些内容:

static HashMap<Character,Integer> conversions = new HashMap<>();

这将使您的代码编译,因为编译器会知道conversions.get()返回Integer(并且可以通过自动取消装箱自动转换为int

在Java 7之前,您还需要重复初始化的类型,使其成为new HashMap<Character,Integer>()

答案 2 :(得分:0)

HashMap存储并返回对象,您无法直接将对象分配给原始对象:

 int temp1 = conversions.get(numOne.charAt(x));
 int temp2 = conversions.get(numOne.charAt(x+1));

试试这个:

int temp1 = (Integer) conversions.get(numOne.charAt(x));
int temp2 = (Integer) conversions.get(numOne.charAt(x+1));

或更好地使用参数化Map来避免在检索对象期间进行强制转换:

static HashMap<Character, Integer> conversions = new HashMap<Character, Integer>();

答案 3 :(得分:0)

您需要将值强制转换为对象。正如其他人已建议的那样使用

for(int x = 0; x <= numOne.length()-2; x++){
    int temp1 = (Integer) conversions.get(numOne.charAt(x));
    int temp2 = (Integer) conversions.get(numOne.charAt(x+1));
}

有了这个,我还建议像下面的

一样声明Hashmap
static Map<String, Integer> conversions = new HashMap<String, Integer>();

答案 4 :(得分:0)

for(int x = 0; x <= numOne.length()-2; x++){
                int temp1 = (Integer) conversions.get(numOne.charAt(x));
                int temp2 = (Integer) conversions.get(numOne.charAt(x+1));
                System.out.println(temp1 + "   "+temp2);

使用它,输出是 -

10 1 1 10