2017-01-13 157 views
0

嘗試從單獨的runner程序中調用的.dat文件中提取等級值和名稱值。在這個其他的java文件中的類是開始對我們來說,我們不得不「實例兩個陣列...」和「使用一個for循環...」不兼容的類型int []不能轉換爲int錯誤

我得到一個錯誤

Incompatible types: int[] cannot be converted to int" error for "grades[i]=g;" and the corresponding String error for "names[i]=n; 

想法?

public GradeBook(int[] g, String[] n, int num) 
{ 
    // **instantiate both arrays with 'num' objects 
      String []names=new String[num]; 
      int[] grades=new int[num]; 
    //**use a for-loop to assign each name and grade with the incoming values 
      for(int i=0;i<num;i++) 
      { 
       names[i]=n; 
       grades[i]=g; 
      } 
} 
+0

請包括課程的完整代碼。在這裏我沒有看到重複的地方,只是分配傳入的數組並完成它。 –

+5

也許你是指'names [i] = n [i]; 等級[i] = g [i];'雖然https://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html#copyOf(int[],%20int)將會是更好 –

+0

@TimBiegeleisen'num'可能是與'n.length'不同的值 –

回答

0

我假設你的實際代碼應該是這個樣子:

public class GradeBook { 
    private String[] names; 
    private int[] grades; 

    public GradeBook(int[] g, String[] n) { 
     names = n; 
     grades = g; 
    } 
} 

剛分配進入的等級和名稱在你的構造。你不需要擔心傳入數組的長度,因爲調用者已經必須處理這個,可能在讀取.dat文件時。迭代也不是必要的。

如果你真的需要讓作爲輸入傳遞給你的構造數組的副本,那麼你可以使用System.arraycopy()爲:

public class GradeBook { 
    private String[] names; 
    private int[] grades; 

    public GradeBook(int[] g, String[] n) { 
     names = new String[n.length]; 
     grades = new int[g.length]; 
     System.arraycopy(n, 0, names, 0, n.length); 
     System.arraycopy(g, 0, grades, 0, g.length); 
    } 

請注意,您只需要進行復印如果代碼調用構造函數也計劃在稍後修改數組。

+0

這不會做一個副本,它只會分配參考...不知道如果OP想要一個副本或不,但我值得指出 - 恕我直言;) – MadProgrammer

+0

@MadProgrammer是的,我知道這一點。我假定調用構造函數的代碼在'.dat'文件中讀取並傳入,而不需要進一步使用該數組。 –

+0

我並不擔心你知道,我擔心OP知道,很難100%確定,但基於他們的代碼他們「可能」想要製作另一個副本......或者不是,它可能是有助於OP指出這種情況下的差異,以便他們對發生的事情有更好的瞭解,只是說;) - 如果你覺得不需要,那麼就不要;) – MadProgrammer

相關問題