0

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

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

指向 for(i = 0; i <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;

}
4

3 回答 3

1

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

基本上和说的一样:

int i = 0; 

然后对 i 不做任何事情。

该声明

ArrayList<String> longestWords = h;

创建一个新的局部变量longestWords,然后什么都不做,如果你有一个名为longestWords的成员,语句应该很简单:

longestWords = h;
于 2017-01-25T21:03:08.547 回答
0

另一种批评是,您从不声明变量i,但您尝试将其分配给一个值。您需要更改以下内容:

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

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

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

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

ArrayList<String> longestWords = h;

longestWords = h;
于 2017-01-25T21:09:19.110 回答
0

Java 变量有一个叫做“作用域”的东西。在方法中声明的变量(如您的longestWords变量)是局部变量。它的范围仅限于该方法。这意味着在该方法之外,方法longestWords中声明的 as 它的定义不存在。您正试图从声明它的方法外部访问局部变量。根据定义,局部变量不存在于声明它的方法之外。

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

如果曾经有一个局部变量被声明为与全局变量同名,则该变量名将引用方法内的局部变量,并引用方法外的全局变量(因为局部变量在外部不存在声明它的方法)。所以如果你在方法内部初始化那个变量,它不会影响全局变量的值。

于 2017-01-25T21:11:53.243 回答