java和js实现的洗牌小程序

  1. 洗牌算法简介

洗牌算法即可将一个包含n个元素的数组打乱,保证每个元素均匀地分布在原数组中。常用的洗牌算法有Fisher–Yates算法(也被称为Knuth-Shuffle算法),其核心思想是将数组从后往前遍历,对于未处理的元素,随机从已处理的元素中选出一个,然后与该元素交换。这样可以保证每个元素被随机地赋予新的位置。

  1. Java实现

Java官方提供了Collections.shuffle方法,可以直接用于List接口的洗牌操作。示例代码如下:

import java.util.*;

public class ShuffleDemo {
    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));
        System.out.println("原数组:" + list);
        Collections.shuffle(list);
        System.out.println("洗牌后:" + list);
    }
}

输出结果:

原数组:[1, 2, 3, 4, 5]
洗牌后:[2, 1, 4, 3, 5]
  1. JS实现

在JS中,我们可以使用Math.random()生成0-1之间的随机数,然后通过交换数组元素来实现洗牌操作。示例代码如下:

function shuffle(arr) {
  for (let i = arr.length - 1; i > 0; i--) {
    const j = Math.floor(Math.random() * (i + 1));
    [arr[i], arr[j]] = [arr[j], arr[i]];
  }
  return arr;
}

const arr = [1, 2, 3, 4, 5];
console.log("原数组:" + arr);
console.log("洗牌后:" + shuffle(arr));

输出结果:

原数组:1,2,3,4,5
洗牌后:2,5,1,4,3

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java和js实现的洗牌小程序 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • jsp页面中如何将时间戳字符串格式化为时间标签

    在 JSP 页面中使用时间戳字符串,需要进行格式化为时间标签。下面是如何将时间戳字符串格式化为时间标签的完整攻略。 步骤1:导入时间函数库 首先,需要引入 JSP 内置的时间函数库,以便使用日期和时间相关的函数。 <%@ page import="java.text.SimpleDateFormat" %> <%@ pa…

    Java 2023年6月15日
    00
  • Java如何打印完整的堆栈信息

    当Java程序遇到异常时,Java虚拟机会将堆栈信息打印到控制台中。但是,默认情况下,Java只会打印简略的堆栈信息,这对于开发中的调试并不方便。本文将会详细介绍如何打印完整的堆栈信息。 问题描述 通常情况下,Java虚拟机只会打印部分的堆栈信息,例如: Exception in thread "main" java.lang.NullP…

    Java 2023年5月26日
    00
  • java web请求和响应中出现中文乱码问题的解析

    当Java Web应用程序处理中文字符时,有可能会出现中文乱码的问题。这通常是由于应用程序中的默认字符编码与请求参数实际所用的字符集不一致导致的。为了解决这个问题,我们需要在以下三个阶段分别设置字符编码格式: 1.浏览器端设置编码格式2.服务器端设置编码格式3.在网页动态生成内容时设置编码格式 1. 浏览器端设置编码格式 在HTML中,浏览器会默认使用UTF…

    Java 2023年5月20日
    00
  • java实现的2048游戏完整实例

    Java实现的2048游戏完整实例攻略 实现思路 2048游戏的核心在于方块的移动和合并。因此,在Java中实现2048游戏的主要思路是: 随机生成游戏棋盘上的初始方块,使用二维数组来记录每个方块的位置和点数; 接受玩家的输入(上下左右方向键),移动棋盘上的方块并合并,生成新的方块; 判断游戏结束的条件(即棋盘是否被填满,无法进行移动),给予玩家胜利或失败的…

    Java 2023年5月18日
    00
  • SpringMVC 拦截器不拦截静态资源的三种处理方式方法

    在 SpringMVC 中,拦截器可以用来拦截请求并进行处理。但是,有时候我们不希望拦截静态资源,因为这会影响应用程序的性能。本文将详细讲解 SpringMVC 拦截器不拦截静态资源的三种处理方式方法,并提供两个示例说明。 1. 方式一:使用 addResourceHandlers 方法 我们可以使用 addResourceHandlers 方法来配置静态资…

    Java 2023年5月18日
    00
  • mybatis插件pageHelper实现分页效果

    Mybatis插件PageHelper实现分页效果攻略 1. 前言 Mybatis是一个优秀的ORM框架,但默认不支持分页功能。如果我们想要在Mybatis中实现分页功能,需要手动在SQL语句中添加limit关键字等分页功能代码,这显然是非常繁琐和困难的,而PageHelper插件的出现解决了这一问题。本文将详细介绍如何使用PageHelper插件实现Myb…

    Java 2023年6月15日
    00
  • Java开发岗位面试被问到反射怎么办

    当你在Java开发面试时被问到反射相关的问题时,需要详细解释反射的概念和使用方法,以及反射在实际项目中的应用。 以下是完整的攻略流程: 1. 理解反射的概念 反射是Java语言的一种特性,可以在运行时动态获取类的信息并操作对象。反射可以使代码更加灵活和可扩展,但过度使用反射也会导致代码难以维护和调试。因此,反射的使用应该谨慎,并在适当的情况下使用。 2. 学…

    Java 2023年5月26日
    00
  • Struts2.5版本struts.xml与web.xml配置的更改方法

    Struts2.5是一个非常流行的Java web框架,其中struts.xml与web.xml是两个重要的配置文件。如果你需要修改它们,以下是详细的操作步骤: 编辑struts.xml Struts2.5默认使用的是struts.xml配置文件,你可以根据自己的需要修改它。下面是修改struts.xml的步骤: 打开struts.xml文件 “` “`…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部