2014-11-08 70 views
0
public class ArraySpecies 
{ 
    public static void main(String[] args) 
     { 

      Species tiger = new Species ("tiger", 27, 0.02); 
      Species dog = new Species ("dog", 100, 12.5); 
      Species[][] oneArray = new Species [2][2]; // Create an array 

      for (int i = 0; i < 2; i++){ // assign value to the array 
       if (i == 0){ 
        for (int z = 0; z < 2; z++){ 
         if (z == 0) { 
          oneArray [z][i] = tiger.getName(); 
         } 
         else { 
          oneArray [z][i] = dog.getName(); 
          } 
         } 
        } 
       else { 
        for (int z = 0; z < 2; z++){ 
         if (z == 0) { 
          oneArray [z][i] = tiger.getPopulation(); 
         } 
         else { 
          oneArray [z][i] = dog.getPopulation(); 
          } 
        } 
       } 
      } 
     } 
    } 

我想將一個類的實例變量值分配給多維數組[2] [2]。它們的數組將有兩行對應於該類的兩個對象,並且兩列對應於該類的兩個實例變量。物種種類有getName()getPopulation()。我收到了一個不兼容的類型錯誤。我的程序有什麼問題?什麼是做我上面指定的另一種方式?將實例變量插入到多維數組中

+0

你從哪裏得到這個錯誤?錯誤堆棧跟蹤在哪裏? – ha9u63ar 2014-11-08 16:17:10

+0

您正在嘗試將String(您的硬幣的名稱)存儲到Species的數組中。這沒有意義。 Specie數組包含物種,而不是字符串。一個物種已經有了一個名字,在別處存儲他們的名字是沒有意義的:如果你有一個物種的數組,你可以訪問他們的名字。 – 2014-11-08 16:18:02

+0

如果你想要物種[2] [2] ='{老虎,狗,老虎,狗}或類似的東西,那麼你可以直接在循環中指定對象(複製構造函數) - 只要你有一個複製構造函數裏面。 – ha9u63ar 2014-11-08 16:20:28

回答

4

此:

Species[][] 

是物種的多維數組。也就是說,它只能包含物種。

然而,該:

oneArray [z][i] = tiger.getName(); 

被插入String到該陣列中,因此你的錯誤。

我懷疑你可能想要一個簡單的物種收集例如new ArrayList<Species>();。您不需要將對象拆分爲多維字段數組以存儲它們。

爲了滿足您的要求,您可以創建一個Objects的數組,您可以在其中存儲任何內容。不過,我認爲這不是一個好主意,因爲你將原始信息與原始信息分離開來,並且失去了類型安全性。優選的選擇是保持類型集合,並做到這一點:

int population = listOfSpecies.get(3).getPopulation(); 

你也可以使用一個Map,給你這個選項:

int population = mapOfSpecies.get("tiger").getPopulation(); 

獨立於Species位置的集合。

+0

我這樣做是因爲我想通過在多個數組的每個元素中輸出值來讀取數據。例如,oneArray [1] [1] =狗的人口值。 – user4147874 2014-11-08 16:22:03

+1

@ user4147874如果你只是有一個一維的物種數組,那麼'array [1] .getPopulation()'包含數組索引1處的種羣(例如,狗)。如果你有硬幣,你有它的名字和人口。不需要兩個維度。 – 2014-11-08 16:24:10