如何生成没有重复数字的4位数密码

时间:2019-09-04 15:33:08

标签: java android random

我是Android编程的新手,我想制作一个4位PIN生成器,而无需重复。我该怎么做??我还不知道如何很好地循环播放。谢谢!!

我已经尝试过Random,但是它给了我重复的数字。

int randomPIN = (int)(Math.random()*9000)+1000;

String pin = String.valueOf(randomPIN);
dummy.setText(pin);

我正在寻找1354、4682、3645的结果,但结果大多是3344、6577、1988

4 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

创建一个数字列表,将其洗净,然后返回前四个数字。这是将其作为静态方法的一种方法:

/* 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();
}

很明显,如果您希望将数字作为数字数组而不是字符串,则对子列表的处理方式将不同于此处所示。

如果您只是返回子列表本身,请注意,每次您更改该列表

答案 2 :(得分:0)

某种程度上的学术练习-这是一项需要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);
    }

答案 3 :(得分:-2)

您将需要在每一步中添加随机整数并检查重复项。

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;
}