【问题标题】:Remove and Replace Duplicates in ArrayList删除和替换 ArrayList 中的重复项
【发布时间】:2016-05-17 02:01:40
【问题描述】:

如何删除 ArrayList 上的重复数字并将其替换为新数字?

我想打印不重复的数字。

这是我的代码:

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;
import javax.swing.JOptionPane;

public class Test {
    public static void main(String[] args) {
        ArrayList<Integer> al = new ArrayList<Integer>();

        int opt = Integer.parseInt(JOptionPane.showInputDialog("How many numbers?");
        for (int i=0 ; i < opc ; i++) {
            al.add(Integer.parseInt(JOptionPane.showInputDialog("Which numbers?")));
        }

        Set<Integer> s = new HashSet<>();
        for (Integer d : al){
            if (s.add(d) == false)
                JOptionPane.showMessageDialog(null,"The number " + d + " was duplicated in position " + al.lastIndexOf(d));
                JOptionPane.showMessageDialog(null,"Replace new number"); //This is where I would like to replace the numbers if possible
            }
        JOptionPane.showMessageDialog("Your numbers without duplicates: "); //This is where it would print
        }
    }
}

【问题讨论】:

  • 您似乎已经进行了一些编码。现在有什么问题?什么不工作?你的期望是什么,你目前的输出是什么?
  • 换成什么?
  • 假设我想要 4 个数字。 3,4,3,2 我想替换第二个 3 所以它应该说 Replace new number 我添加一个 7
  • 如果换成4呢?
  • 它会要求我再次替换,因为我不想要重复的数字

标签: java arraylist joptionpane hashset


【解决方案1】:

防止在用户输入时输入重复的数字,而不是稍后检查和替换它们。

在这个地方做:

for (int i=0 ; i < opc ; i++) {
    al.add(Integer.parseInt(JOptionPane.showInputDialog("Which numbers?")));
}

检查一个号码是否已经存在,如果是,则要求另一个不重复的号码,如果是,则添加并要求下一个号码:

for (int i=0 ; i < opc ; i++) {
    int myNumber = Integer.parseInt(JOptionPane.showInputDialog("Which numbers?"));
    while( true ){
        if( ! al.contains( myNumber ))
           al.add( myNumber );
           break;
        }
        myNumber = Integer.parseInt(JOptionPane.showInputDialog("This number is a duplicate, enter another number again"));
    }
}


======== 编辑 ==================

我已经更正了这个例子。上面(上)一个中if后面缺少{

public class MmuClass {

    public static void main(String... wwwx) {
        List<Integer> lst = Arrays.asList(4, 2, 6, -6, 9);

        ArrayList<Integer> al = new ArrayList<Integer>();

        for (int i = 0; i < 5; i++) {
            int myNumber = Integer.parseInt(JOptionPane.showInputDialog("Which numbers?"));
            while (true) {
                if (!al.contains(myNumber)) {
                    al.add(myNumber);
                    break;
                }
                myNumber = Integer.parseInt(
                        JOptionPane.showInputDialog("This number is a duplicate, enter another number again"));
            }
            al.stream().forEach(System.out::println);
        }
    }
}

【讨论】:

  • 确实有道理,我测试过,但它总是被认为是重复的。我输入第一个数字,它已经说This number is a duplicate, enter another number again
  • 出现错误 - 缺少 { - 我已更正示例并更新了答案。
猜你喜欢
  • 2018-05-29
  • 1970-01-01
  • 1970-01-01
  • 2015-12-12
  • 1970-01-01
  • 2011-01-26
  • 2012-08-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多