测试字符串是否按升序排列

时间:2014-04-28 18:15:33

标签: java random

我在这里写了一段代码来生成指定长度的随机PIN码。代码工作正常但我想添加一个例外,如果PIN以升序结束,则PIN将无效。例如,如果PIN最终为1234,3 3456,4567,则它们将是无效的PIN。

public static String generatePin(int nmrPinDigits)
{
    String pin = new String();
    NUMBER_PIN_DIGITS = nmrPinDigits;
    for(int i = 0; i < NUMBER_PIN_DIGITS; i += 1) 
    {
        double rnd = Math.random();
        rnd *= 9;
        rnd += 1;
        byte rndByte = (byte)rnd;
        String rndStr = Byte.toString(rndByte);
        pin += rndStr;
    }
    return pin;
}

3 个答案:

答案 0 :(得分:3)

修改

实际上OP的问题可能更多的是要知道引脚是否是一个序列。在这种情况下:

char prev = pin.charAt(0);
for (char ch : pin.substring(1).toCharArray()) {
    if (chr - prev != 1) {
        // Not a sequence
        return false;
    }
    prev = chr;
}
// Is a sequence !
return true;

同样适用于降序,只需-1作为测试值。

答案 1 :(得分:0)

最简单的解决方案是将循环中生成的每个随机数字与前一个随机数字进行比较。如果差异为+1,则丢弃该数字并生成另一个数字。

答案 2 :(得分:0)

这是检测升序或降序字符串的方法..

public static boolean checkForAscendingOrDescendingPart(String txt, int l)
{
    for (int i = 0; i <= txt.length() - l; ++i)
    {
        boolean success = true;
        char c = txt.charAt(i);
        for (int j = 1; j < l; ++j)
        {
            if (((char) c + j) != txt.charAt(i + j))
            {
                success = false;
                break;
            }
        }
        if (success) return true;

        success = true;

        for (int j = 1; j < l; ++j)
        {
            if (((char) c - j) != txt.charAt(i + j))
            {
                success = false;
                break;
            }
        }
        if (success) return true;
    }
    return false;
}

在返回pin之前调用此方法..并在那里抛出异常......类似..

checkForAscendingOrDescendingPart(pin, pin.length());