迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > Java >

Java 中的纸牌洗牌

作者:迹忆客 最近更新:2023/05/16 浏览次数:

洗牌一词的字面意思是将元素、对象或卡片以随机或未定义的顺序排列。不遵循定义模式的对象列表被认为是无序的。

类似地,在 Java 中,各种方法允许用户随机播放元素。下面是演示此过程的代码块。


使用 Java 中的传统循环打乱 ArrayList

import java.util.ArrayList;

public class Main {
    private static final int SIZE_OF_DECK = 52;

    public static void main(String[] args) {
        ArrayList<Integer> cardsDeck = new ArrayList<>();
        for (int i = 0; i < SIZE_OF_DECK; ++i) {
            cardsDeck.add(i);
        }
        System.out.println("Deck Of Cards:" + cardsDeck);
        ArrayList<Integer> shuffledDeck = new ArrayList<>();
        while (cardsDeck.size() > 0) {
            int index = (int) (Math.random() * cardsDeck.size());
            int removedCard = cardsDeck.remove(index);
            shuffledDeck.add(removedCard);
        }
        System.out.println("Shuffled Cards" + shuffledDeck);
    }
}

在上面的代码中,实例化了一个 ArrayList。创建的实例有助于将元素添加到 ArrayList。该列表按从 051 值的顺序填充。甲板大小是在类级别声明的静态变量。

for 循环检查条件,其中初始值使用静态甲板大小变量进行检查。现在为了打乱初始列表,创建了另一个空的 ArrayList。我们将应用 while 循环,条件是甲板大小必须大于零值。

保持这种条件的想法是因为一个甲板上的元素被删除并放置在另一个洗牌列表中。因此,原始大小不断减小,最终变为零。

在循环中,我们首先使用 random 函数来查找索引。静态方法存在于 Math 类中,并直接由类名调用。效用函数生成一个介于 0.01.0 之间的随机数。该方法总是返回一个 double 值。

要计算 index 值,形成的随机数乘以数组列表的当前大小。因此,每次生成一个随机索引。

现在,形成的索引用于删除原始甲板中索引处的元素。remove 方法来自 ArrayList 类,它删除索引处的特定值。它需要删除列表中的索引或位置。

该函数还返回列表中索引处的元素。要删除的对象被添加到新的随机列表中。循环继续,其中一个元素现在减小了原始甲板的大小。因此,当它下次迭代时,将生成一个新的索引。并且每次都会删除一个值并将其附加到混洗列表中。

下面是给定代码块的输出。

Deck Of Cards:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51]
Shuffled Cards[51, 34, 28, 47, 14, 49, 42, 50, 26, 0, 44, 43, 2, 36, 30, 8, 46, 11, 21, 23, 7, 4, 33, 41, 32, 1, 20, 3, 10, 18, 6, 40, 29, 24, 31, 13, 45, 39, 22, 15, 27, 48, 9, 5, 25, 12, 38, 35, 37, 17, 16, 19]

使用 Java 中的集合 shuffle 函数对 ArrayList 进行洗牌

下面是演示使用 shuffle 方法进行混洗的代码块。

import java.util.ArrayList;
import java.util.Collections;

public class Main {
    public static void main(String[] args) {
        int deckSize = 52;
        ArrayList<Integer> list = new ArrayList<>();
        for (int i = 0; i < deckSize; ++i) {
            list.add(i);
        }
        System.out.println("Sequential List: " + list);
        Collections.shuffle(list);
        System.out.println("Shuffled List: " + list);
    }
}

在代码块中,ArrayList 实例化的过程是一样的。列表中元素的添加与第一个代码中的添加类似。我们使用 println 方法将有序列表打印到控制台。

现在,调用 Collectionsshuffle 函数。此方法执行排列并随机计算给定列表中的值。此函数将随机选择的元素转储回列表中。当提供的列表不支持设置操作时,它会抛出 UnsupportedOperationException。随机形成的列表与原始列表一起打印在控制台中。

Sequential List[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51]
Shuffled List[46, 5, 4, 0, 19, 11, 13, 21, 1, 38, 36, 29, 31, 35, 48, 22, 49, 6, 14, 51, 3, 47, 16, 12, 42, 27, 50, 40, 26, 30, 33, 9, 43, 39, 2, 10, 28, 44, 8, 24, 41, 32, 25, 45, 34, 7, 23, 15, 18, 20, 37, 17]

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

如何在 Java 中延迟几秒钟的时间

发布时间:2023/12/17 浏览次数:217 分类:Java

本篇文章主要介绍如何在 Java 中制造程序延迟。本教程介绍了如何在 Java 中制造程序延时,并列举了一些示例代码来了解它。

如何在 Java 中把 Hashmap 转换为 JSON 对象

发布时间:2023/12/17 浏览次数:187 分类:Java

它描述了允许我们将哈希图转换为简单的 JSON 对象的方法。本文介绍了在 Java 中把 Hashmap 转换为 JSON 对象的方法。我们将看到关于创建一个 hashmap,然后将其转换为 JSON 对象的详细例子。

如何在 Java 中按值排序 Map

发布时间:2023/12/17 浏览次数:171 分类:Java

本文介绍了如何在 Java 中按值对 Map 进行排序。本教程介绍了如何在 Java 中按值对 Map 进行排序,并列出了一些示例代码来理解它。

如何在 Java 中打印 HashMap

发布时间:2023/12/17 浏览次数:192 分类:Java

本帖介绍了如何在 Java 中打印 HashMap。本教程介绍了如何在 Java 中打印 HashMap 元素,还列举了一些示例代码来理解这个主题。

在 Java 中更新 Hashmap 的值

发布时间:2023/12/17 浏览次数:146 分类:Java

本文介绍了如何在 Java 中更新 HashMap 中的一个值。本文介绍了如何在 Java 中使用 HashMap 类中包含的两个方法-put() 和 replace() 更新 HashMap 中的值。

Java 中的 hashmap 和 map 之间的区别

发布时间:2023/12/17 浏览次数:79 分类:Java

本文介绍了 Java 中的 hashmap 和 map 接口之间的区别。本教程介绍了 Java 中 Map 和 HashMap 之间的主要区别。在 Java 中,Map 是用于以键值对存储数据的接口,

在 Java 中获取用户主目录

发布时间:2023/12/17 浏览次数:218 分类:Java

这篇文章向你展示了如何在 Java 中获取用户主目录。本教程介绍了如何在 Java 中获取用户主目录,并列出了一些示例代码以指导你完成该主题。

Java 中 size 和 length 的区别

发布时间:2023/12/17 浏览次数:179 分类:Java

这篇文章教你如何知道 Java 中大小和长度之间的区别。本教程介绍了 Java 中大小和长度之间的区别。我们还列出了一些示例代码以帮助你理解该主题。

Java 中的互斥锁

发布时间:2023/12/17 浏览次数:111 分类:Java

了解有关 Java 中互斥锁的一切,在计算机科学领域,互斥或互斥被称为并发控制的属性。每台计算机都使用称为线程的最小程序指令序列。有一次,计算机在一个线程上工作。为了更好地理解,

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便