2015-10-05 53 views
-1

對於標題的奇怪寫法感到抱歉,我的問題是:我在java中製作遊戲,我有一個Model Library類,它將所有模型加載到特定文件夾到模型的數組列表。我的代碼對於加載模型工作得很好,但問題是從數組列表中獲取具有特定名稱的模型。Java for循環數組列表返回錯誤

我用:

public RawModel getModel(String name){ 
    for(int i =0;i< modes.size();i++){ 
     System.out.println((i+1)+". Comparing " + name + " with " + modes.get(i).getName()); 
     if(modes.get(i).getName() == name){ 
      System.out.println("Returned model " + modes.get(i).getName()); 
      return modes.get(i); 

     } 
    } 
    System.err.println("Returned default Model"); 
    return modes.get(0); 
} 

這在理論上應該與得到的模型與上述名稱的工作,但在控制檯它返回:

1. Comparing platform.river with cube 
Returned default Model 
Returned default Model 
2. Comparing platform.river with grenade 
3. Comparing platform.river with plasma 
4. Comparing platform.river with platform.river 
5. Comparing platform.river with waterhole 
1. Comparing cube with cube 
2. Comparing cube with grenade 
3. Comparing cube with plasma 
4. Comparing cube with platform.river 
5. Comparing cube with waterhole 
1. Comparing waterhole with cube 
2. Comparing waterhole with grenade 
3. Comparing waterhole with plasma 
4. Comparing waterhole with platform.river 
5. Comparing waterhole with waterhole 
Returned default Model 

它似乎並沒有完成返回null之前的循環!然後在第二個中,它似乎完全跳過了循環,然後第三個似乎在循環之後返回null。有沒有更好的方法來獲得具有上述名稱的模型?我該如何解決這個問題?

+4

比較字符串比較String是錯誤的http://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java –

+1

使用。在比較字符串時等於而不是== – SerMintt

回答

1
if(modes.get(i).getName() == name){ 

改用

if(modes.get(i).getName().equals(name)) { 

你被比較基準,而不是對象的內容。您應該使用equals()比較它們的方法。

0

首先在這條線的: modes.get(I).getName()==名 你比較兩個字符串時使用==而不是.equals(name)

0

當比較字符串使用.equals(),而不是因爲== ==與字符串指指針位置,因此,使用.equals()中的字符串

0

使用一個for each環代替的內容進行比較。

public RawModel getModel(String name){ 
    for(String modeName: modes) { 
     System.out.println("Comparing " + name + " with " + modeName); 
     if(name.equals(modeName)){ 
      System.out.println("Returned model: " + modeName); 
     } 
    } 
    System.out.println("Returning default model"); 
} 

而且,你用RawModel