从特定数字生成一个随机数?

时间:2014-11-07 15:47:26

标签: java random

我想从特定数字生成一个随机数。 例如:

如果我有这个号码1234,我想从它(或为它)生成一个随机数来替换旧号码。但是这个新号码仅适用于旧号码。

目的是,接收一个号码,将其改为随机数,但知道该随机数属于旧号码。

这是我到目前为止所做的:

long seed ="seed".hashCode();
Random rnd = new Random(seed);
int a = fourDigitIntRandom(rnd);
int b = fourDigitIntRandom(rnd);

public static int fourDigitIntRandom(Random rnd){
    int a1 = rnd.nextInt(10);
    int a2 = rnd.nextInt(10);
    int a3 = rnd.nextInt(10);
    int a4 = rnd.nextInt(10);
    int a = Integer.parseInt(a1+""+a2+""+a3+""+a4);
    return a;
}

但是,这只是生成一个4位数的随机数。

更好的例子

我有几个文件。在每个文件中有几个与电话号码对应的号码。

我希望通过将该数字的最后4位数字更改为每个数字来匿名化,并将其作为种子文件的名称随机生成一个新的数字。

但我希望每个号码的更改对于该号码始终相同。

所以,如果我有号码12345678并将其更改为12349876(9876是随机数)。

然后在文件中,出现相同的数字,我希望更改相同。

2 个答案:

答案 0 :(得分:1)

这样的事情: `

public static String nDigitIntRandom(Random rnd, int numOfdigits) {
final StringBuilder sb  = new StringBuilder();
for(int i = 0; i < numOfdigits; i++) {
    sb.append(rnd.nextInt(10));
}
return sb.toString();
}

` 你可能最好使用Strings而不是int,因为你可以超过MAX_INT easilly。您还需要保留用于每个电话号码的种子

答案 1 :(得分:0)

这就是我解决问题的方法: 首先,我创建了一个String的静态ArrayList,其中包含4位数的所有数字:

private static ArrayList<String> getListOfValues(){
    ArrayList<String> listInt = new ArrayList<String>(10000);
    for(int i = 0; i < 10000; i++){
        if(i < 10) listInt.add("000"+i);
        else if(i < 100) listInt.add("00"+i);
        else if(i < 1000) listInt.add("0"+i);
        else listInt.add(Integer.toString(i));
    }
    return listInt;
}

然后使用Collections中的方法shuffle,我会根据种子(来自文件的名称)随机化ArrayList

ArrayList<String> listOfAnonValues = getListOfValues();
Collections.shuffle(listOfAnonValues,new Random(filename.hashCode()));

然后,每当我想要匿名化一个数字时,我会使用该数字作为ArrayList的索引来获取要替换的数字。 所以,根据文件名

,每个4位数字都有一个唯一的随机数来代替它

很抱歉所有的困惑和感谢你们给予的所有帮助,这有很大的帮助;)