java - 在 Java 中使用 Arraylist 不重复

标签 java arraylist

好的,所以我是 ArrayList 的新手,我想做的是制作一个程序,从一副 54 张卡片中随机获取 3 张卡片,没有任何重复。我不知道在我的 if 循环中放什么。请帮忙

import javax.swing.*;
import java.awt.*;
import java.util.*;
import java.util.ArrayList;

public class card_ran1 extends JFrame
{
    public card_ran1()
    {
        ArrayList<Integer> Ran = new ArrayList<Integer>();
        setLayout(new GridLayout(1,4,5,5));
        Random random = new Random();
        int i = random.nextInt(54) + 1 ;
        int n = random.nextInt(54) + 1 ;
        int m = random.nextInt(54) + 1 ;
        Ran.add(i);

        if (Ran.contains(n))
        {
            //what should go here
        }
        if (Ran.contains(m)) 
        {
            //what should go here
        }
        add(new JLabel(new ImageIcon("card/" + Ran.get(0) + ".png")));
        add(new JLabel(new ImageIcon("card/" + Ran.get(1) + ".png")));
        add(new JLabel(new ImageIcon("card/" + Ran.get(2) + ".png")));
    }

    public static void main(String[] args) 
    {
        card_ran1 frame = new card_ran1();
        frame.setTitle("Random Cards");
        frame.setSize(600,300);
        frame.setLocationRelativeTo( null );
        frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
        frame.setVisible( true );
    }
}

最佳答案

如果值是唯一的,请使用 Set,而不是 List

Set<Integer> set = new LinkedHashSet<Integer>(); // order is preserved

使用循环获取 3 个不同的值:

while (set.size() < 3)
    set.add(random.nextInt(54) + 1);

如果你真的需要一个List,使用拷贝构造函数:

List<Integer> list = new ArrayList<Integer>(set);

只需几行代码即可完成所有事情。

关于java - 在 Java 中使用 Arraylist 不重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18500833/

相关文章:

java - 如何在速度模板中获取动态属性

java - javafx场景对象中的根节点是什么?

java - 在 Java 8 中从一个 ArrayList 中查找一个字符串作为另一个 ArrayList 字符串的字符序列

android - 如何在 android 中按 String 对 HashMap<String, String[]> 进行排序

java - 按属性搜索项目 ArrayList

java - 您如何使用 Log4j 将 stdout 和 stderr 写入/捕获到文件并使用 Windows 和 Tomcat 5.5 (Java)?

java - Java中的函数回调也是匿名类吗?

Java ArrayList 按相同顺序对两个列表进行排序

连接 php apache 时的 Java 杂项行为