我正在尝试从一个文本块中获取每行中最长的单词列表。我无法从我的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;
}
答案 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存在于声明它的方法之外)。因此,如果在方法内部初始化该变量,则不会影响全局变量的值。