2017-01-25 5 views
0

Я пытаюсь получить список самых длинных слов из каждой строки в блоке текста. Я не могу получить информацию для печати с моей основной страницы, которая находится в файле processing.class. Информация обрабатывается в Tools.class. и есть также Counters.class, который задействован, но он неизменен.Зачем мне это предупреждение компилятора?

Однако, это дает мне это предупреждение: The value of the local variable longestWords is not used в моем встречном коде, на линии, где я объявляю longestWords =h;. Почему это и как я могу это исправить?

Это мой код:

(обработка)

longestWords = stat.getLongestWords(); 
    for(i = 0; i < longestWords.size(); i++){ 
     System.out.print(longestWords.get(i)); 
    } 

Ошибка брошено: Исключение в потоке "главный" java.lang.NullPointerException в deol5210_a1.Processing.main (Processing.java:66)

, который указывает на для (я = 0; я < longestWords.size(); я ++) { (Инструменты)

}else { 

      currentWord = lineScanner.next(); 

      if(currentWord.contains("$")){ 

       currentWord.replace("$", ""); 
       moneySpent += Double.parseDouble(currentWord.replace("$", "")); 

      }else if (currentWord.length() > lineLongestWord.length()){ 
       lineLongestWord = currentWord; 

      } 

      if(currentWord.length() > longestWord.length()){ 

       longestWord = currentWord; 
       lineLongestWord = currentWord; 
       wordCount++; 

      } else { 

       wordCount++; 

      } 

(счетчики)

public ArrayList<String> getLongestWords(){ 
    return longestWords; 
} 

public Counters(int a, double b, int c, int d, double e, double f, String g, ArrayList<String> h){ 
    lineCount = a; 
    avgWordCount = b; 
    wordCount = c; 
    purchaseCount = d; 
    moneySpent = e; 
    avgSpent = f; 
    longestWord = g; 
    ArrayList<String> longestWords = h; 

} 
+0

Что вы думаете? – shmosel

+1

Это просто предупреждение о том, что вы никогда не используете эту переменную. – Gatusko

+0

Я не могу получить содержимое массива для печати в моем классе обработки. Это дает мне исключение nullpointer. Я заметил, что я печатал его неправильно. Я изменил код печати, чтобы использовать longestWords.get (i), но теперь он бросает исключение NullPointerException. –

ответ

1

Инициализация переменной отличается от его использования, предупреждение исчезнет, ​​когда вы используете переменную (распечатать, передать его в метод, и т.д. ').

В основном это то же самое, как говорят:

int i = 0; 

, а затем ничего с не делать.

Заявление

ArrayList<String> longestWords = h; 

создает новую локальную переменную longestWords, а затем ничего не делает с ним, если у вас есть член называется longestWords statementshould не будет просто:

longestWords = h; 
+0

Это была проблема, спасибо! Мне просто пришлось удалить ArrayList из longestWords = h; –

+0

отлично! примите мой ответ тогда :) – monkeyStix

0

Другая критика, вы никогда объявите переменную i, но вы попытаетесь присвоить ее значению. Вы должны изменить следующее:

for(i = 0; i < longestWords.size(); i++) 

в

for(int i = 0; i < longestWords.size(); i++) 

Как для предупреждения, вы объявляете longestWords в пределах блока области вашего Counters конструктора. Вероятно, это скорее всего будет переменной экземпляра в пределах Counters, а не частной переменной внутри конструктора.

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

ArrayList<String> longestWords = h; 

в

longestWords = h; 
0

Java переменные имеют то, что называется "сфера". Переменная, объявленная внутри метода, например, ваша переменная longestWords, является локальной переменной. Его объем ограничен этим методом.Это означает, что вне этого метода определение longestWords, как оно объявлено в методе, не существует. Вы пытаетесь получить доступ к локальной переменной вне метода, в котором она была объявлена. По определению локальная переменная не существует вне метода, в котором она объявлена.

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

Если есть локальная переменная, которая объявляется с тем же именем, что и глобальная переменная, это имя переменной будет ссылаться на локальную переменную в методе и на глобальную переменную вне метода (поскольку локальная переменная doesn существует вне метода, в котором он был объявлен). Поэтому, если вы инициализируете эту переменную внутри метода, это не повлияет на значение глобальной переменной.