Erro “A matriz só é gravada, nunca lida” exibida no código Java

Aug 25 2020

Tenho tentado aperfeiçoar um pouco do Java e estou tentando atualizar o básico, então estou trabalhando no livro 24 horas do Sam sobre java. Um dos projetos para se familiarizar com a descrição de objetos fornece o código da seguinte maneira:

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.");
        }
    }
}

O erro "A matriz é apenas gravada, nunca lida" é exibida na compilação na 7ª linha:

Gremlin[] gremlins = new Gremlin[numGremlins];

e eu não consigo entender por que isso não está funcionando! Desculpe se estou sendo estúpido, mas qualquer ajuda será muito apreciada :) Obrigado!

Desculpe editar rapidamente para adicionar a outra classe que não mencionei !!

Eu também tenho a seguinte aula:

package com.java24hours;

public class Gremlin {
    static int gremlinCount = 0;

    public Gremlin() {
        gremlinCount++;
    }

    static int getGremlinCount() {
        return gremlinCount;
    }
}

Em seguida, especifiquei os argumentos da linha de comando personalizando a configuração do projeto.

Última edição !! ... Muito obrigado a todos, eu realmente aprecio isso. Estou usando um IDE e movi as classes para a pasta de pacotes de origem em vez do pacote 'com.java24hours' ... e meus códigos originais funcionaram bem ?! Obviamente, sou um novato! Obrigado novamente a todos :)

Respostas

3 Code-Apprentice Aug 25 2020 at 22:15

Isso é um aviso, não um erro. Você pode ignorá-lo com segurança e seu programa funcionará como você deseja.

O aviso é porque você está criando um array e preenchendo-o com elementos. Mas então você nunca realmente usa o array nem os elementos desse array para nada. Por exemplo, você poderia fazer

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

para imprimir o comprimento da matriz. Isso removerá o aviso.

Melhor ainda, se você está escrevendo isso como um exercício para aprender sobre staticmétodos e variáveis, simplesmente não use um array.

Bohemian Aug 25 2020 at 22:14

Você não está fazendo nada com os elementos da gremlinsmatriz. ou seja, em nenhum lugar seu código faz algo parecido gremlins[i].someMethod(), mas é apenas um aviso.