Выявление синтаксических ошибок в Java - PullRequest
0 голосов
/ 21 октября 2010

Учитывая этот код в Java:

int i,j;
String[] names;
names[0] = new String("mary");
names[1] = "John";
i = names.length;
j = names[0].length();

Мне нужно найти ошибку. Насколько я могу судить, строки 1, 2, 4 и 5 являются правильными, потому что они включают в себя простые переменные экземпляра, добавление элементов в массивы и определение длины массива. Однако строки 3 и 6 странные.

Можете ли вы добавить строку в массив, как в строке 3? Если массив полон строк, можете ли вы проиндексировать один из них и использовать для него метод length ()?

Ответы [ 7 ]

7 голосов
/ 21 октября 2010

Синтаксических ошибок в приведенном выше коде нет, однако:

они включают простые переменные экземпляра

Они не являются переменными экземпляра, если вы не объявили их как часть класса вне его методов. Если они объявлены в методах, они называются локальными переменными в зависимости от того, какие блоки кода они объявили.


Попытка добавить что-либо в неинициализированный массив, как в

String[] names;
names[0] = new String("mary");
names[1] = "John";

Все равно будет вызывать ошибку во время компиляции, однако это не из-за неправильного синтаксиса, а из-за попытки манипулировать неинициализированной переменной. Вам нужно инициализировать его, поэтому, например, как уже говорили другие, используйте:

String[] names = new String[2];

Если массив заполнен строками, можете ли вы его проиндексировать и использовать для него метод length ()?

Конечно, эта строка совершенно легальна:

j = names[0].length();

И эквивалентно (при условии, что вы исправили ошибку неинициализированного массива выше yada yada):

String firstElement = names[0];
j = firstElement.length();
4 голосов
/ 21 октября 2010

Переменная names не была инициализирована в массив из двух элементов.

String[] names;

должно быть

String[] names = new String[2];

Остальная часть кода выглядит хорошо.

Некоторые незначительные замечания:

  • new String("mary"); почти во всех ситуациях эквивалентен просто "mary"

  • Вы также можете инициализироватьnames - массив, подобный этому

    String[] names = { "mary", "John" };
    
  • Как только массив создан, размер фиксируется.Вы не можете "добавлять элементы" в массив.Вы можете только обновить значения в нем.(Для массива, который может расти, я предлагаю вам взглянуть на ArrayList.)

3 голосов
/ 21 октября 2010

Нет синтаксической ошибки.Это ошибка компилятора, потому что ваш массив не инициализирован.

Еще один момент - при инициализации массива убедитесь, что он инициализирован с размером, который может содержать данные, которые вы пытаетесь вставить в него позже.

Теперь извините за то, что задали очевидный вопрос, но что помешало вам попытаться скомпилировать этот код и посмотреть, что это за ошибки?Они достаточно наглядны - компилятор eclipse говорит:

Возможно, имена локальных переменных не были инициализированы

Итак, чтобы ответить на заголовок вашего вопроса (при условии, что его следует прочитать "как определить синтаксические ошибки в Java "):

Пусть компилятор сделает это.

2 голосов
/ 21 октября 2010

Массив имен никогда не создается.Вам нужно изменить строку 2: String[] names; на String[] names = new String[2];

1 голос
/ 21 октября 2010

Переменная names никогда не инициализируется.Попытка присвоить значения его элементам приведет к ошибке компилятора.Строго говоря, это не синтаксическая ошибка.

0 голосов
/ 21 октября 2010

Попробуйте это:

int i,j; 
String[] names = new String[2]; 
names[0] = "Mary"; 
names[1] = "John"; 
i = names.length; 
j = names[0].length(); 

Причина, по которой ваш код не работал, заключалась в том, что, говоря String[] names;, вы только заявляли, что будет массив имен, но в Java вам нужно либо явно указать, сколько элементов будет содержать ваш массив, либо сразу присвоить значения массиву как таковые ...

String[] names = {"Mary", "John"};

для инициализации массива.

0 голосов
/ 21 октября 2010

Вы заметите, что все говорят, что это не синтаксическая ошибка.И они верны.Синтаксическая ошибка - это ошибка, которая нарушает синтаксис или форму языка программирования.Здесь вы видите СЕМАНТИЧЕСКУЮ ошибку, ошибку в значении кода.

Думайте о двух, как в английском, синтаксис имеет отношение к грамматике и орфографии, тогда как семантика имеет дело с фактическим значением.1003 *

...