Инструкция присваивает значение, но значение не читается и не используется в любой последующей инструкции - PullRequest
0 голосов
/ 26 августа 2011

У меня есть кусок кода

for(int i = 0; i < num_of_random; i++){

    String str = in.readLine();
    if(str != null){
        String[] randoms = new String[4];
        randoms = str.split(",");

        dateRanges[i] = Integer.parseInt(randoms[0]);
        id[i] = Integer.parseInt(randoms[1]);
        flag[i] = Integer.parseInt(randoms[2]);
        system[i] = Integer.parseInt(randoms[3]);
    }
}

Когда я запускаю этот код для findBugs, я получаю предложение для

"String [] randoms = new String [4];"

Эта инструкция присваивает значение локальной переменной, но это значение не читается и не используется в любой последующей инструкции. Часто это указывает на ошибку, поскольку вычисленное значение никогда не используется.

Почему я получаю это?

Большое спасибо

Ответы [ 4 ]

7 голосов
/ 26 августа 2011

Поскольку вы инициализируете переменную значением (new String[4]), а затем заменяете значение переменной другим (результат str.split(",")) сразу после. Таким образом, инициализация не требуется.

Ваш код функционально эквивалентен

String[] randoms = str.split(",");

за исключением того, что он выделяет новый массив строк, который немедленно отбрасывается.

0 голосов
/ 26 августа 2011

Это пример техники, которую я называю Техника Я тупой .

Обычно это результат того, что программист пишет код, но не понимает, что он делает. В какой-то момент программист прочитал или услышал что-то вроде этого: «Вы должны инициализировать все локальные переменные!». Когда они написали код String[] randoms, который появился у них в голове, они добавили = new String[4].

Более опытный программист может взглянуть на это и подумать: Раньше я был тупым, но не больше! Давайте переместим объявления переменных из цикла и создадим что-то вроде этого:

String str;
String[] randoms;
for(int index = 0; index < num_of_random; ++index)
{
    str = in.readLine();
    if (str != null)
    {
        randoms = str.split(",");
        dateRanges[index] = Integer.parseInt(randoms[0]);
        id[index] = Integer.parseInt(randoms[1]);
        flag[index] = Integer.parseInt(randoms[2]);
        system[index] = Integer.parseInt(randoms[3]);
    }
}  
0 голосов
/ 26 августа 2011

Попробуйте напрямую:

String[] randoms = str.split(",");

Вам не нужно создавать экземпляр String[], метод split уже делает это.

0 голосов
/ 26 августа 2011

Потому что вы можете просто сделать это:

String[] randoms = str.split(",");
...