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

时间:2017-12-03 20:17:11

标签: java arraylist java.util.scanner

我有一个类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");                
    }                                               
  }                                             
}

1 个答案:

答案 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是否为空是没有意义的 - 它必须是,否则你不会退出循环!