为什么我会收到此编译器警告?

时间:2017-01-25 20:41:13

标签: java compiler-warnings unused-variables

我正在尝试从一个文本块中获取每行中最长的单词列表。我无法从我的main中获取要在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));
    }

抛出错误:线程“main”java.lang.NullPointerException中的异常     在deol5210_a1.Processing.main(Processing.java:66)

指向(i = 0; i&lt; longestWords.size(); i ++){ (工具)

}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;

}

3 个答案:

答案 0 :(得分:1)

初始化变量与使用变量不同,当您使用变量时,警告将消失(打印它,将其传递给方法等等)。

基本上它跟说:

int i = 0; 

然后没有对我做任何事情。

声明

ArrayList<String> longestWords = h;

创建一个新的局部变量longestWords,然后对它做任何事情,如果你有一个名为longestWords的成员,那么这些陈述应该是简单的:

longestWords = h;

答案 1 :(得分:0)

另一个批评是,你从不声明变量i,但是你试图将它赋值给一个值。您需要更改以下内容:

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

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

至于你的警告,你在Counters构造函数的块范围内声明了最长的词。这很可能应该是Counters中的实例变量,而不是构造函数中的私有变量。

去除那里的声明,而是使用最有可能已在您的类中定义的变量。从:

ArrayList<String> longestWords = h;

longestWords = h;

答案 2 :(得分:0)

Java变量有一些名为&#34; scope&#34;。在方法内声明的变量(如longestWords变量)是局部变量。其范围仅限于该方法。这意味着在该方法之外,在方法中声明的longestWords的定义不存在。您正尝试从声明它的方法之外访问本地变量。根据定义,局部变量不存在于声明它的方法之外。

如果要在多个方法中使用变量,则需要在任何方法之外声明它,使其成为全局变量。

如果有一个局部变量声明与全局变量同名,那么该变量名称将引用方法中的局部变量,并引用方法外的全局变量(因为局部变量不是&# 39; t存在于声明它的方法之外)。因此,如果在方法内部初始化该变量,则不会影响全局变量的值。