打印ArrayList的所有项目

时间:2015-10-29 01:18:21

标签: java arraylist

我知道这是一个非常基本的问题,但我已经搜索过,但没有为我的问题找到合适的答案。我有一个从扫描仪填充的对象ArrayList。当我尝试打印出列表中的所有元素时,我只会将最后一个元素作为列表中的对象重复多次。

首先是Object类:

public class Colors {
    String name;

    @Override
    public String toString(){
        return name.toString();
    }
}

现在是主要班级:

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

 public class Vec { 
    public static void main(String[] args) {
    Colors col= new Colors();
    List <Colors> l = new ArrayList<>();
    boolean flag = true;

    while(flag == true){
       System.out.println("Type in name of color");
       Scanner kb = new Scanner (System.in);
       col.name = kb.next();
       l.add(col);

       for (int j= 0; j<l.size();j++) {
           Object g = (Object)l.get(j);
           System.out.println("Name of color: "+g);
       }
     }
   }
} 

我究竟做错了什么?

1 个答案:

答案 0 :(得分:3)

您使用new关键字在Java中声明对象。您只是声明了Colors的一个实例,然后一遍又一遍地更改其名称。然后一遍又一遍地将相同的Colors添加到列表中。您需要做的是更改声明Colors的位置,这可以在while声明中完成。

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Vec
{
    public static void main(String[] args) {
        List <Colors> l = new ArrayList<>();
        boolean flag = true;

        Scanner kb = new Scanner (System.in);

        while (flag) {
            System.out.println("Type in name of color");

            Colors col = new Colors ();
            col.name = kb.next();
            l.add(col);

            for (int j = 0; j<l.size();j++) {
                Object g = (Object)l.get(j);
                System.out.println("Name of color: "+g);
            }
        }
    }
}

这里的区别在于col现在在while语句的本地范围内重新声明。

小笔记,这些都是偏离主题的,针对的是codereview,而不是回答这个问题。

while (flag == true),无需与true进行比较。您也无需始终创建新的Scanner

我建议为变量使用更好的名称。 lcolkbflag基本上可以是任何内容。

一些建议(他们只是建议):

  • l,是您的列表,其中包含多个Colors,现在Colors也具有误导性,因为它只有一种颜色,我建议将类名更改为Colorl列为colors
  • col,很好。
  • kb,请改用scanner
  • 旗帜,什么?而是使用runningplayingon

另外一个问题是,由于您知道l商店的内容,因此您可以使用for代替商店。

            for (Colors c : l) {
                System.out.println("Name of color: " + c);
            }