2011-12-11 78 views
1

我想比較一個Double值與TreeMap對象內的另一個double值。我在比較myPowerAvg和myMap.get(myMap.get(2))的行中收到以下錯誤。我不知道爲什麼我得到這個錯誤,因爲我比較兩個雙打(順便說一下,這個方法是在一個線程內執行的)。Android ClassCastException與TreeMap比較

12-10 22:12:30.524: ERROR/AndroidRuntime(1059): FATAL EXCEPTION: Thread-23 
12-10 22:12:30.524: ERROR/AndroidRuntime(1059): java.lang.ClassCastException: java.lang.String 
12-10 22:12:30.524: ERROR/AndroidRuntime(1059):  at java.lang.Integer.compareTo(Integer.java:36) 
12-10 22:12:30.524: ERROR/AndroidRuntime(1059):  at java.util.TreeMap.cmp(TreeMap.java:1317) 
12-10 22:12:30.524: ERROR/AndroidRuntime(1059):  at java.util.TreeMap.get(TreeMap.java:1282) 
12-10 22:12:30.524: ERROR/AndroidRuntime(1059):  at com.community.HomeActivity.setTopUsers(HomeActivity.java:159) 
12-10 22:12:30.524: ERROR/AndroidRuntime(1059):  at com.community.HomeActivity.access$0(HomeActivity.java:136) 
12-10 22:12:30.524: ERROR/AndroidRuntime(1059):  at com.community.HomeActivity$4.run(HomeActivity.java:127) 

代碼:

if(myPowerAvg < myMap.get(myMap.firstKey())){ 
     TextView view = (TextView)findViewById(R.id.firstPlace);  
    }else{ 
     TextView view = (TextView)findViewById(R.id.firstPlace); 
     view.setText("First Place: \n" + myMap.firstKey() + " " + 
      " at " + myMap.get(myMap.firstKey())); 
    } 

    if(myPowerAvg < myMap.get(myMap.get(2)) && myPowerAvg > myMap.get(myMap.firstKey())){ 
     TextView view = (TextView)findViewById(R.id.secondPlace); 
     view.setText("Second Place: \n" + AppStatus.mUserName + " " + 
      " at " + myPowerAvg; 
    }else{ 
     TextView view = (TextView)findViewById(R.id.secondPlace); 
     view.setText("Second Place: \n" + myMap.get(2) + " " + " at " + 
      myMap.get(myMap.get(2))); 
    } 
    if(myPowerAvg < myMap.get(myMap.get(2)) && myPowerAvg > myMap.get(myMap.firstKey())){ 
     TextView view = (TextView)findViewById(R.id.secondPlace); 
     view.setText("Second Place: \n" + AppStatus.mUserName + " " + " at " 
      + myPowerAvg); 
    }else{ 
     TextView view = (TextView)findViewById(R.id.secondPlace); 
     view.setText("Second Place: \n" + myMap.get(2) + " " + " at " + 
      myMap.get(myMap.get(2))); 
    } 
+2

哪一行是'HomeActivity.java'行159?這個例外特別說明你正在試圖將'String'轉換爲'Integer'(顯然,你不能)。 –

+1

我的猜測是你沒有在你的TreeMap變量的聲明中提供類型參數。不知何故,你比較一個字符串,它期望一個整數(或反之亦然?),並且編譯器不捕捉它。我同意@MДΓΓБДLL關於從哪裏開始追蹤這件事。如果您還發布了myMap的聲明,這將有所幫助。 –

+0

第159行是if(myPowerAvg myMap.get(myMap.firstKey()))。這裏是treemap聲明:TreeMap myMap = new TreeMap (); – user836200

回答

0

你說MYMAP是TreeMap<String, Double> - 但你打電話myMap.get(2)。獲得的參數應該是一個字符串。

+0

我打電話給myMap.get(myMap.get(2),它獲得double值,第一個「if」語句正常工作,第二個「if」語句失敗 – user836200

+0

我終於明白了這一點:幾個問題我報告的問題已根據您的答案解決了首先,我試圖根據double值打印出前三名用戶,但由於String值是首先列出的,因此TreeMap是基於字符串進行排序的(Map.Entry entry:myMap.entrySet()){ }爲了解決這個問題,我將我的TreeMap設置爲TreeMap 。 Double key = entry.getKey(); String value = entry.getValue();}感謝您的幫助! – user836200