为了账号安全,请及时绑定邮箱和手机立即绑定

如何生成没有重复号码的 4 位 PIN 码

如何生成没有重复号码的 4 位 PIN 码

眼眸繁星 2023-07-13 14:35:03
我是 android 编程新手,我想制作一个没有任何重复的 4 位 PIN 码生成器。我该怎么做??我还不知道如何很好地循环。谢谢你!!我已经尝试过随机,但它给了我重复的数字。int randomPIN = (int)(Math.random()*9000)+1000;String pin = String.valueOf(randomPIN);dummy.setText(pin);我正在寻找 1354, 4682, 3645 的结果,但结果大多是 3344, 6577, 1988
查看完整描述

4 回答

?
牧羊人nacy

TA贡献1862条经验 获得超7个赞

创建一个数字列表,对其进行打乱,然后返回前四位数字。这是作为静态方法执行此操作的一种方法:


/* No need for a new list each time */

private static final List<Integer> digits =

    new ArrayList<>(Arrays.asList(0, 1, 2, 3, 4, 5, 6, 7, 8, 9));


/**

 * Returns a PIN string that contains four distinct digits.

 */

public static String nextPin() {

    Collections.shuffle(digits);

    final StringBuilder sb = new StringBuilder(4);

    for (Integer digit : digits.subList(0, 4)) {

        sb.append(digit);

    }

    return sb.toString();

}

显然,如果您希望数字作为数字数组而不是字符串,那么您处理子列表的方式将与我在此处显示的方式不同。


如果您只返回子列表本身,请注意,每次您返回子列表时,它都会发生变化


查看完整回答
反对 回复 2023-07-13
?
料青山看我应如是

TA贡献1772条经验 获得超8个赞

有点学术性的练习 - 这是一个需要 Java 8 的练习:


    // flag to control if you want number sequence to be the same each run

    boolean repeatable = true;


    // seed for randomness - for permutation of list (not the integers)

    Random rnd = new Random((repeatable ? 3 : System.currentTimeMillis()));


    // generate randomized sequence as a List

    List<Integer> myNums;

    Collections.shuffle((myNums = IntStream.rangeClosed(1000, 9999).boxed().collect(Collectors.toList())), rnd);


    // Work with list...

    for (Integer somePin : myNums) {

        Log.i("", "Next PIN: "+somePin);

    }


查看完整回答
反对 回复 2023-07-13
?
慕慕森

TA贡献1856条经验 获得超17个赞

//创建列表ArrayList numbers = new ArrayList(); 随机 randomGenerator=new Random();while (numbers.size() < 4) {int random = randomGenerator .nextInt(4); if (!numbers.contains(random)) {numbers.add(random);}}



查看完整回答
反对 回复 2023-07-13
?
素胚勾勒不出你

TA贡献1827条经验 获得超9个赞

您必须一步一步添加随机整数并检查是否有重复项。


Random random = new Random();

int rdmInt = random.nextInt(9);

String pin = "";

while (pin.length() < 4) {

    rdmInt = random.nextInt(9);

    String addition = String.valueOf(rdmInt);

    if (pin.contains(addition)) continue;

    pin += addition;

}


查看完整回答
反对 回复 2023-07-13
  • 4 回答
  • 0 关注
  • 142 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信