«Массив записывается только в, никогда не считывается из» ошибка, отображаемая в коде Java

#java

#java

Вопрос:

Я пытался усовершенствовать некоторые Java и пытаюсь обновить основы, поэтому я работал с 24-часовой книгой Sam по Java. Один из проектов для ознакомления с описанием объектов предоставляет код следующим образом:

 package com.java24hours;

public class GremlinLab {
    public static void main(String[] arguments) {
        int numGremlins = Integer.parseInt(arguments[0]);
        if (numGremlins > 0) {
            Gremlin[] gremlins = new Gremlin[numGremlins];
            for (int i = 0; i < numGremlins; i  ) {
                gremlins[i] = new Gremlin();
            }
            System.out.println("There are "   Gremlin.getGremlinCount()
                  " gremlins.");
        }
    }
}
  

Ошибка «Массив записывается только в, никогда не считывается из» отображается при компиляции в 7-й строке:

 Gremlin[] gremlins = new Gremlin[numGremlins];
  

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

Извините, быстрое редактирование, чтобы добавить другой класс, который я не упомянул!!

Я также получил следующий класс:

 package com.java24hours;

public class Gremlin {
    static int gremlinCount = 0;

    public Gremlin() {
        gremlinCount  ;
    }

    static int getGremlinCount() {
        return gremlinCount;
    }
}
  

Затем я указал аргументы командной строки, настроив конфигурацию проекта.

Последнее редактирование !!… Большое всем спасибо, я действительно ценю это. Я использую IDE и переместил классы в папку с исходными пакетами, а не в пакет ‘com.java24hours’….и мои исходные коды работали нормально?! Очевидно, что я очень новичок! Еще раз спасибо всем 🙂

Комментарии:

1. Для чего вы используете массив? Вы заполняете его, а затем программа завершается.

2. Два незначительных замечания: это предупреждение, а не ошибка. — Вы можете удалить массив и просто вызвать new Gremlin() в цикле. Это должно удалить предупреждение.

3. Вы заполняете массив, а затем никогда ничего с ним не делаете. Я подозреваю, что Gremlin.getGremlinCount() предполагается что-то с этим сделать, но это не так.

4. Спасибо всем, проблема, похоже, решена! Я отредактировал свой оригинальный пост — еще раз спасибо 🙂

Ответ №1:

Это предупреждение, а не ошибка. Вы можете безопасно игнорировать это, и ваша программа будет функционировать так, как вы намереваетесь.

Предупреждение связано с тем, что вы создаете массив и заполняете его элементами. Но тогда вы фактически никогда не используете массив или элементы этого массива для чего-либо. Например, вы могли бы сделать

 System.out.println("There are "   gremlins.length   " gremlins.");
  

для вывода длины массива. Это удалит предупреждение.

А еще лучше, если вы пишете это как упражнение для изучения static методов и переменных, просто не используйте массив вообще.

Комментарии:

1. Также не используется сам массив, а не только его элементы.

2. @f1sh Ох… вы правы. Я неправильно прочитал Gremlin.getGremlinCount() , что использую массив.

3. Просто примечание (это даже не удар по этому ответу), когда OP читает это — если вы решите использовать gremlins.length вместо Gremlin.getGremlinCount() для инструкции print , код, который отслеживает количество гремлинов со статической переменной, тогда будет неиспользован. Однако в этом случае вы можете не получить предупреждение, поскольку некоторые IDE не генерируют предупреждения для общедоступных методов и переменных.

4. @HylianPikachu Хороший момент. Код OP выглядит как упражнение для изучения static , поэтому массив даже не нужен.

Ответ №2:

Вы ничего не делаете с элементами gremlins массива. т.е. нигде ваш код не выполняет что-то подобное gremlins[i].someMethod() , но это всего лишь предупреждение.