2017-01-13 4 views
0

Пытается ввести значения классов и значения имени из файла .dat, который вызывается в отдельной программе runner. Класс в этом другом файле Java началась для нас, и мы должны были «экземпляры обоих массивов ...» и «использовать для цикла ...»Несовместимый тип int [] не может быть преобразован в int error

Я получаю сообщение об ошибке

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 копия или нет, но я бы хотел указать на нее - IMHO;) – MadProgrammer

+0

@MadProgrammer Да, я знаю это. Я предположил, что код, вызывающий конструктор, читается в файле '.dat' и передал его, не требуя дальнейшего использования этого массива. –

+0

Я не беспокоюсь о том, что вы знаете, я беспокоюсь о том, что OP знает, сложно быть на 100% уверенным, но на основе их кода они «могут» захотеть сделать еще одну копию ... или нет, это может быть полезны OP, чтобы указать различия в этом случае, чтобы они лучше понимали, что происходит, просто говоря;) - если вы не чувствуете, что это необходимо, то не делайте;) – MadProgrammer

Смежные вопросы