2014-11-29 12 views
0

Я объявил публичные статические массивы для имени и ID:ошибка: Array требуется, но строка найдено

public static String[] name = new String[19];  
public static int[] id = new int[19]; 

Но java compiler говорит:

java:70: error: array required, but String found 
java:71: error: array required, but int found 

Я не знаю, что это неправильно. Как я объявлял переменные или метод, который я написал?

public static boolean add(String name, int id, int i) 
{ 
    if (i < 20) { 
     name[i] = name; 
     id[i] = id; 
     return true; 
    } 
    else if (i > 20) { 
     for (int j = 0; j < id.length; j++) { 
      if (id[j] == 0 && name[j].equals("null")) 
       id[j] = id; 
      name[j] = name; 
     } 
     return true; 
    } 
    else 
     return false; 
} 

ответ

2

У вас есть столкновение между статическими name массивом строк и локальной переменной name Строки передается методе add.

Лучшим решением было бы использовать разные имена. Это сделает код намного понятнее.

Если вы по-прежнему настаивают на использовании же имя, вы можете разрешить коллизию имен путем доступа к статическому массив, используя имя класса:

YourClassName.name[i]= name; 

То же самое относится и к вашему id Int массива и id переменной Int.

2

Обратите пристальное внимание на то, как вы используете переменные. name (внутри вашего метода) является String, но вы делаете доступ к элементу массива на нем. с i. То же самое верно для id; это int, но вы делаете доступ к элементу массива на нем.

Вы эффективно затеняете свои статические переменные, что вызывает путаницу и душевную боль.

Рассмотрите возможность переименования параметров в свой метод или использование имени класса для их ссылки.

Либо:

public static boolean add (String theName , int theIds, int i) 

или:

// for every usage of id and name as arrays 
MyClass.name[i]= name; 
MyClass.id[i]=id; 
Смежные вопросы