我制作了一个散列图,将罗马数字作为键存储,将十进制数作为值存储。错误说“不兼容的类型 - 找到了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));
}
}
}
答案 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));
}
有了这个,我还建议像下面的
一样声明Hashmapstatic 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