Java 为什么我的display()方法不能打印出所有ArrayList元素?

Java 为什么我的display()方法不能打印出所有ArrayList元素?,java,arraylist,java.util.scanner,Java,Arraylist,Java.util.scanner,我有一个类容器,用户应该能够在其中输入任意数量的单词,直到他什么也不键入。我有addWord(Word)方法,每次运行do/while循环时,每个输入都被添加到ArrayList单词中。每次循环运行时,我都将用户输入值作为参数传递给addWord()方法 现在,我想在do/While循环停止运行后,使用display()方法显示数组的所有元素。但由于某种原因,当我尝试调用display()方法时,它只显示一个空数组[] 你有什么办法可以帮忙吗 import java.util.ArrayList

我有一个类容器,用户应该能够在其中输入任意数量的单词,直到他什么也不键入。我有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);                    
    }                                               
}

查看您的
addWord
方法:

public void addWord(String word) {                                              
  words = new ArrayList<String>();                                              
  words.add(word);                                          
}
public void addWord(字符串字){
words=newarraylist();
添加(word);
}
每次你打这个电话,它都会创建一个新的列表,这样你就永远不会有一个以上的单词出现在列表中

第一行,初始化
单词
,应该在构造函数中(或作为字段初始值设定项)。然后从
addWord
中删除该行-理想情况下使
words
字段同时成为最终字段,以避免将来出现类似错误,并删除
setWords
方法,除非您确实需要它来做其他事情


容器
中,这一切都是错误的(尽管不清楚它是否真的提供了除了直接使用
列表
之外的任何价值)。如注释中所述,当前
main
中的do/while循环将在末尾添加一个空字符串。此外,在循环之后检查
word
是否为空也没有意义——必须是空的,否则就不会退出循环

看看你的
addWord
方法:

public void addWord(String word) {                                              
  words = new ArrayList<String>();                                              
  words.add(word);                                          
}
public void addWord(字符串字){
words=newarraylist();
添加(word);
}
每次你打这个电话,它都会创建一个新的列表,这样你就永远不会有一个以上的单词出现在列表中

第一行,初始化
单词
,应该在构造函数中(或作为字段初始值设定项)。然后从
addWord
中删除该行-理想情况下使
words
字段同时成为最终字段,以避免将来出现类似错误,并删除
setWords
方法,除非您确实需要它来做其他事情


容器
中,这一切都是错误的(尽管不清楚它是否真的提供了除了直接使用
列表
之外的任何价值)。如注释中所述,当前
main
中的do/while循环将在末尾添加一个空字符串。此外,在循环之后检查
word
是否为空也没有意义——必须是空的,否则就不会退出循环

另外,do while部分将向ArrayList中添加一个空字符串作为word。@Ladislav\u M:True。我会在答案中记下这一点。谢谢大家:)另外,为了避免打印最后一个空字符串,我应该在调用display()之前删除最后一个数组元素,还是有更好的方法?@Joe如果你是初学者,最简单的解决方案是对输入调用.trim()方法,看看长度是否大于零,如果是,则将其添加到ArrayList@乔:有各种不同的方法,但这与你所问的完全不同。我建议您尝试各种方法,如果遇到问题,可以问一个新问题。另外,do while部分将在ArrayList中添加一个空字符串作为word。@Ladislav_M:True。我会在答案中记下这一点。谢谢大家:)另外,为了避免打印最后一个空字符串,我应该在调用display()之前删除最后一个数组元素,还是有更好的方法?@Joe如果你是初学者,最简单的解决方案是对输入调用.trim()方法,看看长度是否大于零,如果是,则将其添加到ArrayList@乔:有各种不同的方法,但这与你所问的完全不同。我建议您尝试各种方法,如果遇到问题,可以问一个新问题。每次调用addWord方法时,都要重新初始化ArrayList。您将只有上次调用中传递的单词。每次调用addWord方法时,您都会重新初始化ArrayList。您将只有上次调用中传递的单词。