2014-04-30 85 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

相關問題