2017-01-13 145 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

相关问题