【问题标题】:Displaying elements of Arraylist one by one一个一个显示Arraylist的元素
【发布时间】:2017-02-13 16:56:48
【问题描述】:

每次我单击下一个按钮时,它都应该显示我的数组列表的下一个元素。这不是正在发生的事情。它停留在第一个元素。

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

【问题讨论】:

    标签: java arraylist next


    【解决方案1】:

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

    【讨论】:

    • 我现在明白了 =) 感谢您的及时回复!
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多