java 逐个显示Arraylist的元素

ztyzrc3y  于 2023-05-27  发布在  Java
关注(0)|答案(2)|浏览(175)

每次我点击下一步按钮,它应该显示我的数组列表的下一个元素。不是这样的。它停留在第一个元素。

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次点击)

yhived7q

yhived7q1#

每次单击都创建一个新的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次后,它将停止生成输出,因为迭代器将到达列表的末尾。

cgvd09ve

cgvd09ve2#

每次执行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());
        }
    }
});

相关问题