首页 > 其他分享 >Android生产永不重复的数字

Android生产永不重复的数字

时间:2024-09-23 22:22:03浏览次数:3  
标签:数字 永不 重复 UniqueNumberGenerator 生成 util 随机 import Android

在Android中生成永不重复的数字,通常指的是在一个特定的上下文中(比如在一个应用会话期间或用户登录期间)生成一系列唯一的随机数字。这可以通过多种方式实现,下面给出一个简单的示例,展示如何在一个应用会话中生成一系列不重复的随机数字。

方法概述

  • 使用集合存储已生成的数字:创建一个集合来存储已经生成的随机数字,每次生成新数字时检查该集合,确保新数字未被使用过。
  • 预生成所有可能的数字并从中选择:如果数字范围有限,可以先生成所有可能的数字放入集合或列表中,然后从中随机选取。

示例代码

假设你需要生成一个范围内的不重复随机数字序列,例如生成1至100之间的不重复随机数字:

1. 使用HashSet存储已生成的数字

import android.util.SparseArray;

import java.util.HashSet;
import java.util.Random;
import java.util.Set;

public class UniqueNumberGenerator {

    private static final int MAX_NUMBER = 100; // 最大数字
    private Set<Integer> usedNumbers = new HashSet<>(); // 已经使用过的数字集合
    private Random random = new Random();

    /**
     * 生成一个不重复的随机数字
     * @return 不重复的随机数字
     */
    public int generateUniqueRandomNumber() {
        int randomNumber;
        do {
            randomNumber = random.nextInt(MAX_NUMBER) + 1; // 生成1至100之间的随机数
        } while (usedNumbers.contains(randomNumber)); // 检查是否已经使用过该数字
        usedNumbers.add(randomNumber); // 添加到已使用集合中
        return randomNumber;
    }

    /**
     * 清空已使用数字集合
     */
    public void reset() {
        usedNumbers.clear();
    }
}

2. 预生成所有可能的数字并从中选择

如果你知道数字的范围较小,并且可以接受预先生成所有的数字,可以采用以下方法:

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

public class UniqueNumberGenerator {

    private List<Integer> availableNumbers = new ArrayList<>();

    public UniqueNumberGenerator(int maxNumber) {
        for (int i = 1; i <= maxNumber; i++) {
            availableNumbers.add(i);
        }
        Collections.shuffle(availableNumbers); // 打乱顺序
    }

    /**
     * 生成一个不重复的随机数字
     * @return 不重复的随机数字
     */
    public int generateUniqueRandomNumber() {
        if (availableNumbers.isEmpty()) {
            throw new IllegalStateException("No more unique numbers available.");
        }
        return availableNumbers.remove(0); // 移除并返回第一个元素
    }

    /**
     * 重置可用数字列表
     */
    public void reset() {
        availableNumbers.clear();
        for (int i = 1; i <= 100; i++) {
            availableNumbers.add(i);
        }
        Collections.shuffle(availableNumbers);
    }
}

使用示例

3在你的Activity或Fragment中使用上面定义的UniqueNumberGenerator类:

public class MainActivity extends AppCompatActivity {

    private UniqueNumberGenerator generator;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        generator = new UniqueNumberGenerator();
        
        // 生成一个不重复的随机数字
        int uniqueNumber = generator.generateUniqueRandomNumber();
        Log.d("MainActivity", "Generated unique number: " + uniqueNumber);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        // 当Activity销毁时,重置生成器
        generator.reset();
    }
}

注意事项

  • 如果数字范围非常大,使用集合存储所有数字可能会消耗大量内存。此时,第一种方法可能更适合。
  • 如果数字范围较小,并且可以接受预先生成所有数字,第二种方法更为高效。
  • 请确保在适当的时机调用reset()方法,以便在需要时重置状态。

标签:数字,永不,重复,UniqueNumberGenerator,生成,util,随机,import,Android
From: https://blog.51cto.com/u_16367370/12092136

相关文章

  • Android Wear 开发 (一),阿里、腾讯、华为、京东等多家大厂最新安卓面试题
    importandroid.support.v4.app.NotificationCompat.WearableExtender;普通通知栏手机:普通的通知栏在手机上的效果应该都不陌生,这里就不展开说明手表:手表端的效果是由2张卡片构成的,第一张是手机通知栏的信息组成,第二张是点击开发手机应用,具体的效果与手机通知栏的点击事......
  • Android与WebView(网页)的使用以及交互,阿里快手拼多多等7家大厂Android面试真题
    <?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android=“http://schemas.android.com/apk/res/android”android:layout_width=“match_parent”android:layout_height=“match_parent”android:orientation=......
  • Android Studio 快捷用法
    AndroidStudio快捷用法路一直都在   原文链接    2017年03月10日发布AndroidStudio已经用了两年左右了,对快捷键的使用一直如同段誉的六脉神剑一般,偶尔会biu不出来,从来没有静下心来耐心的看完Tips,为了避免这种尴尬,决定把Tips完整的练习一遍并记录在案。......
  • 3. 无重复字符的最长子串 Golang实现
    题目描述给定一个字符串s,请你找出其中不含有重复字符的最长子串的长度。注意区分子串和子序列。示例3:输入:s="pwwkew"输出:3解释:因为无重复字符的最长子串是"wke",所以其长度为3。请注意,你的答案必须是子串的长度,"pwke"是一个子序列,不是子串。思路分析:1.......
  • 超越Sora支持120秒超长AI视频模型免费开玩,免费无限制生成视频的ai,这样的ai你需要吗?附
    超越Sora支持120秒超长AI视频模型免费开玩,免费无限制生成视频的ai,这样的ai你需要吗?附代码及详细搭建步骤,包含全套工具iPhone、Mac、Android直接下载使用。120秒超长AI视频模型来了!不仅超越Sora极限,还免费开源!近日,PicsartAIResarch等团队联合发布了StreamingT2V,可以生成长达1200帧......
  • Android实战之组件化中如何进行版本控制和依赖管理
    本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点GitSubmodules是Git的一个功能,它允许你将一个Git仓库作为另一个Git仓库的子目录。这个功能在组件化开发中非常有用,因为它允许你将项目分解为多个独立的模块,每个模块都......
  • Android经典实战之组件化原理、优缺点、实现方法?
    本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点组件化的原理组件化是一种软件架构设计方法,它将复杂的应用程序分解为更小、更易于管理的模块或组件。在Android开发中,组件化允许开发者将应用分割成独立的、可复用的模块,每个......
  • 安卓13删除下拉栏中的设置按钮 android13删除设置按钮
    总纲android13rom开发总纲说明文章目录1.前言2.问题分析3.代码分析4.代码修改5.编译6.彩蛋1.前言  顶部导航栏下拉可以看到,底部这里有个设置按钮,点击可以进入设备的设置页面,这里我们将更改为删除,不同用户通过这个地方进入设置。也就是下面这个按钮。......
  • android 识别设备是否为模拟器
    一个识别工具类,android12-14测试有效,其他版本未测:publicclassEmulatorDetectionUtil{privatestaticfinalString[]PKG_NAMES={"com.mumu.launcher","com.ami.duosupdater.ui","com.ami.launchmetro","com.ami.syncduosservices",&qu......
  • uniapp uni-push2.0,iOS、Android的在线离线的推送
    本次是后端服务的苹果和安卓手机FCM的推送说明:ios在线的时间可以监听到服务端推送的数据ios离线是监听不到推送的数据,只能在消息栏点击后才能监听到数据android在线可以监听到服务端数据android离线同样不能监听到,点击打开后可监听android(FCM)离线需要连接外网才可收到消息......