2014-04-30 65 views
3

下面是我的代码。我很成功添加值地图 但是当试图获得特定键的值,并更新它,然后没有价值越来越Java:地图显示错误:二元运算符的操作数类型错误“+”

收到错误:坏数类型二进制运算符“+”

Map map = new HashMap(); 

    System.out.println("Enter the number :"); 
    int k=sc.nextInt();  
    System.out.println(map.get(k));  

    System.out.println("Enter the value:"); 
    int v=sc.nextInt(); 

    map.put(k, map.get(k)+v); //getting error here: bad operand type for binary operator "+" 

回答

4

你不使用泛型(您使用的是raw type代替),所以编译器不知道是在地图上什么类型的值 - map.get(k)回报Object至于编译器而言,并没有+(Object, int)运营商。

只需使用你的map声明和初始化泛型:

// Java 7 and later, using the "diamond operator" 
Map<Integer, Integer> map = new HashMap<>(); 

或者:

// Java 5 and 6 (will work with 7 and later too, but is longer) 
Map<Integer, Integer> map = new HashMap<Integer, Integer>(); 

其余部分将没有问题编译。

如果你是新的仿制药,看到tutorialcomprehensive FAQ。你应该非常,很很少使用原始类型(几乎从不)。如果你这样做,你应该能够配置你的IDE或编译器给你一个警告(例如-Xlintjavac)。

3

map是生HashMap。所以,该值可以是任何类型。您不能在java中使用+运算符与任何类型的对象。

为了克服这个问题,定义一个通用的地图像下面

Map<Integer, Integer> map = new HashMap<>(); //Java 7 version 

Map<Integer, Integer> map = new HashMap<Integer, Integer>(); //Java 5 and later versions 

在这里,无论是键和值是整数的类型,所以你可以使用+运营商与他们

2

您的地图未使用泛型。

当使用泛型没有做到这一点

Map<Integer, Integer> map = new HashMap<>();(假设你有Java的7+) Map<Integer, Integer> map = new HashMap<Integer, Integer>();(假设您具备Java 5+)

map.get()结果是Object这当然不能用与+操作

+0

+1参考相关的Java版本 –

+0

@CahitGungor谢谢! – geoand

相关问题