Java 中的纸牌洗牌
洗牌一词的字面意思是将元素、对象或卡片以随机或未定义的顺序排列。不遵循定义模式的对象列表被认为是无序的。
类似地,在 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
。该列表按从 0
到 51
值的顺序填充。甲板大小是在类级别声明的静态变量。
for
循环检查条件,其中初始值使用静态甲板大小变量进行检查。现在为了打乱初始列表,创建了另一个空的 ArrayList
。我们将应用 while
循环,条件是甲板大小必须大于零值。
保持这种条件的想法是因为一个甲板上的元素被删除并放置在另一个洗牌列表中。因此,原始大小不断减小,最终变为零。
在循环中,我们首先使用 random
函数来查找索引。静态方法存在于 Math
类中,并直接由类名调用。效用函数生成一个介于 0.0
和 1.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
方法将有序列表打印到控制台。
现在,调用 Collections
的 shuffle
函数。此方法执行排列并随机计算给定列表中的值。此函数将随机选择的元素转储回列表中。当提供的列表不支持设置操作时,它会抛出 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]
相关文章
Java 中将字节转换为整数
发布时间:2023/05/16 浏览次数:139 分类:Java
-
本文重点介绍如何使用 Byte Wrapper Class 和 Casting 在 Java 中将字节转换为 int 数据类型。字节数据类型定义为 8 位有符号二进制补码整数,而 int 数据类型可归类为 32 位有符号二进制补码整数。除
Java 错误 Class Has Been Compiled by a More Recent Version of Java Runtime
发布时间:2023/05/16 浏览次数:88 分类:Java
-
Java 错误消息 Class Has Been Compiled by a More Recent Version of Java Runtime 显示了不受支持的类版本。 它说类文件版本是63,当前Java运行时可以编译Java代码直到类文件版本61。
Java 中错误 Java.Lang.OutOfMemoryError: Unable to Create New Native Thread
发布时间:2023/05/16 浏览次数:188 分类:Java
-
在本文中,我们将了解 java.lang.OutOfMemoryError: unable to create new native thread 错误。无法在 Java 中创建新的本机线程错误
Java 中必须捕获或声明抛出未报告的异常
发布时间:2023/05/16 浏览次数:183 分类:Java
-
本文将介绍未报告的异常必须被捕获或声明为在 Java 中抛出的编译时错误。Java 是一种面向对象的强类型编译语言,具有类的概念来利用编程的不同方面,如继承和多态性。 它还很好地支持处理
Java 中错误 Error: Class, Interface, or Enum Expected 修复
发布时间:2023/05/16 浏览次数:86 分类:Java
-
Java 是一种面向对象的强类型编译语言,具有类的概念来利用编程的不同方面,如继承和多态性。 本文将介绍编译时错误 error: class, interface, or enum expected 。
Java 中 Identifier Expected Error 错误
发布时间:2023/05/16 浏览次数:166 分类:Java
-
在本文中,我们将了解 Java 的 <identifier> 预期错误。了解 Java 中的 <identifier> 预期错误 <identifier> 预期是新手程序员面临的最常见的 Java 编译时错误。
Java 中错误 Error Opening Registry Key 'Software JavaSoft Java Runtime Environ
发布时间:2023/05/16 浏览次数:112 分类:Java
-
在本文中,我们将了解 Error opening registry key 'Software\JavaSoft\Java Runtime Environment.3' 在 Java 中的含义以及解决方法。
Java 中 Java.Lang.VerifyError: Bad Type on Operand Stack 错误
发布时间:2023/05/16 浏览次数:71 分类:Java
-
在本文中,我们将了解 Java 中的 java.lang.VerifyError。理解 Java 中的 java.lang.VerifyError java.lang.VerifyError 是 Java 虚拟机 (JVM) 在字节码验证过程中发生的错误。
Java 中的异常 Javax.Net.SSL.SSLHandShakeException: Remote Host Closed Connect
发布时间:2023/05/16 浏览次数:160 分类:Java
-
在本文中,我们将了解 javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake 以及解决此异常的一些可能方法。