2015-04-04 42 views
0

有人可以告訴我,如果這是將對象轉換爲字符串的正確方法嗎?首先下面將對象轉換爲字符串錯誤


 public String generateResponse(HashSet<String> words){ 
      Iterator it = words.iterator(); 
       while(it.hasNext()){ 
        String word = it.next(); // Object to string error 
        String input = responseMap.get(word); 
        if(input != null){ 
         return input; 
        } 
       } 
     return pickDefaultResponse(); 
     } 

的錯誤,那麼我這樣做,和它的工作。

 public String generateResponse(HashSet<String> words){ 
      Iterator it = words.iterator(); 
       while(it.hasNext()){ 
        String input = responseMap.get(it.next());// i put it here 
        if(input != null){ 
         return input; 
        } 
       } 
     return pickDefaultResponse(); 
     } 

我很好奇的錯誤。我做了一點研究,因爲我只是在學習,我不知道這是對還是錯。它的工作,但它是正確的?

 public String generateResponse(HashSet<String> words){ 
      Iterator it = words.iterator(); 
       while(it.hasNext()){ 
        String word = it.next().toString();// added toString() 
        String input = responseMap.get(word); 
         if(input != null){ 
         return input; 
         } 
       } 
     return pickDefaultResponse(); 
     } 
+2

使用迭代器 ..也取決於你添加到HashSet的對象 – Prashant 2015-04-04 09:14:07

+1

或只是一個for-each循環... – 2015-04-04 09:14:58

+1

謝謝。有一個字符串迭代器。我今天學到了一些東西:) – 2015-04-04 09:21:30

回答

0
Iterator it = words.iterator(); 

這種說法忽略了迭代器的類型參數。這意味着it.next()的退貨類型爲Object,如果沒有轉換,則不能將其分配給String

responseMap.get(it.next()); 

作品,因爲Map.get參數的類型爲Object

String word = it.next().toString(); 

也可以工作,因爲通過it.next()返回Object實際上是一個String,因此toString返回相同String

這將工作太:

String word = (String) (it.next()); 

但我建議增加一個類型參數的Iterator變量:

Iterator<String> it = words.iterator(); 
while(it.hasNext()){ 
    String word = it.next(); 
    // ... 

注:「忽略」的類型參數是一個壞主意最倍。

+0

這個解釋對我這樣的初學者很有幫助。 – 2015-04-04 09:36:19

-2

是啊是

  1. 你不能直接給一個HashSet爲一個字符串。

您必須將其轉換。通過toString方法

  • 儘可能多的我的信息,在烏爾第二殼體... 當您使用以下代碼

    「字符串輸入= responseMap.get( it.next());」

  • 對於不同的數據類型,有很多重載的方法。所以當你直接提供了一個hashset。它的工作正確

    0

    串字= it.next()

    首先,它沒有一個「;」結束的字符串,其次你需要明確地將它轉換爲字符串

    更改代碼to string word =(String)it.next();

    0

    將原始類型迭代器更改爲泛型類型。

    Iterator it = words.iterator(); 
    

    Iterator<String> it = words.iterator(); 
    
    +1

    謝謝Prashant – 2015-04-04 09:37:36

    +0

    @RyanG:如果你找到有用的答案,你可以對它進行補充,以幫助其他人。謝謝 – Prashant 2015-04-04 09:46:53

    +0

    我現在只有8個代表點:(我禁止投票贊成,但我衷心感謝你的幫助,再次感謝。 – 2015-04-04 09:54:23