2

我制作了一个哈希图,将罗马数字存储为键,将十进制数字存储为值。错误显示“不兼容的类型 - 找到 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));
            }
        }
    }
4

5 回答 5

5

换行:

static HashMap conversions = new HashMap();

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

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

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

总而言之,这将自动装箱您的原语并解决您的问题

于 2013-10-07T16:58:26.453 回答
1

正确使用泛型,你可以告诉 Java 你HashMap应该包含什么:

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

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

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

于 2013-10-07T16:58:55.873 回答
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>();
于 2013-10-07T16:55:48.170 回答
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>();
于 2013-10-07T16:59:46.093 回答
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

于 2013-10-07T17:09:01.930 回答