逐个显示Arraylist的元素

时间:2016-10-05 09:48:26

标签: java arraylist next

每当我点击下一个按钮时,它应该显示我的arraylist的下一个元素。这不是正在发生的事情。它停留在第一个元素。

JButton btnNext = new JButton("Next");
    btnNext.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            ArrayList numbers = new ArrayList();
            numbers.add("A");
            numbers.add("B");
            numbers.add("C");                 
            ListIterator litr = numbers.listIterator();               
              if (litr.hasNext()) {                  
                 System.out.print(litr.next());
              }


        }
    });
    btnNext.setBounds(71, 167, 89, 23);
    contentPane.add(btnNext);

获得输出:AAA 预期输出:ABC(3次点击)

2 个答案:

答案 0 :(得分:4)

对于每次单击,您创建一个新的ArrayList,向其中添加3个元素,创建一个迭代器并通过迭代器从列表中获取第一个元素。 因此,您始终可以获得相同的输出。

为了在每次点击时获得不同的元素,您应该将ArrayList和迭代器作为班级成员。

例如:

public class YourClass
{
    private List<String> numbers;
    private ListIterator<String> litr;

    public YourClass () {
        numbers = new ArrayList<>();
        numbers.add("A");
        numbers.add("B");
        numbers.add("C");                 
        litr = numbers.listIterator();  
    }

    ... 
    btnNext.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {              
            if (litr.hasNext()) {                  
                System.out.print(litr.next());
            }
        }
    });
    ...
}

请注意,单击按钮3次后,它将停止生成输出,因为迭代器将到达列表的末尾。

答案 1 :(得分:0)

每次执行actionPerformed方法时,都会重新创建列表和迭代器。但是,您必须重用相同的迭代器实例才能获得所需的结果。你可以,例如将迭代器存储为ActionListener

中的字段
btnNext.addActionListener(new ActionListener() {

    private final ListIterator litr;

    {
        ArrayList numbers = new ArrayList();
        numbers.add("A");
        numbers.add("B");
        numbers.add("C");
        this.litr = numbers.listIterator();
    }

    public void actionPerformed(ActionEvent arg0) {           
        if (litr.hasNext()) {                  
            System.out.print(litr.next());
        }
    }
});