我有一个类Container,用户应该可以输入任意数量的单词,直到他没有输入任何内容。我有 addWord(Word)方法,每次运行do / while循环时,每个输入都会添加到 ArrayList 字。我每次循环运行时都将用户输入值作为参数传递给addWord()方法。
现在我想在do / While循环停止运行后使用 display()方法显示数组的所有元素。但由于某种原因,当我尝试调用方法display()时,它只显示一个空数组[]。
有什么方法可以提供帮助吗?
import java.util.ArrayList;
import java.util.List;
public class Container {
private List<String> words;
public Container() {
}
public List<String> getWords() {
return words;
}
public void setWords(List<String> words) {
this.words = words;
}
public void addWord(String word) {
words = new ArrayList<String>();
words.add(word);
}
public void display() {
System.out.println(words);
}
}
主要方法:
import java.util.Scanner;
public class ContainerMain
{
public static void main(String[] args)
{
Container one = new Container();
Scanner myScan = new Scanner(System.in);
String word = "s";
do
{
word = myScan.nextLine();
one.addWord(word);
}
while (!word.equals(""));
if (word.equals("")) {
one.display();
}
else {
System.out.println("No hope fam");
}
}
}
答案 0 :(得分:3)
查看您的addWord
方法:
public void addWord(String word) {
words = new ArrayList<String>();
words.add(word);
}
每当你打电话给它时,它就会创建一个新的列表 - 所以你永远不会最终有一个单词。
初始化words
的第一行应该在您的构造函数中(或作为字段初始值设定项)。然后从addWord
中删除该行 - 理想情况下同时将words
字段设为最终,以避免将来出现此类错误,并删除setWords
方法,除非您确实需要它别的什么。
Container
中的所有错误(虽然不清楚除了直接使用List<String>
之外它确实提供了任何价值)。如评论中所述,目前main
中的do / while循环将在末尾添加一个空字符串。另外,在循环之后检查word
是否为空是没有意义的 - 它必须是,否则你不会退出循环!