有没有一种简单的方法来重新排列java中的数字?

时间:2011-05-19 19:50:21

标签: java arrays integer

基本上在坚果壳中我想随机打一个号码说:

73524896

我希望我们使用相同的数字,但可以随意重新排列:

46932857

我有没有办法在java中轻松完成这项工作?

7 个答案:

答案 0 :(得分:4)

这是我最喜欢的解决方案。 (请注意,所有改组都是同样可能的。)

Random rnd = new Random();
int rndInt = rnd.nextInt(10000000);

String[] rndChars = ("" + rndInt).split("(?<=.)");
Collections.shuffle(Arrays.asList(rndChars));
String result = "";
for (String s : rndChars) result += s;
int shuffled = Integer.parseInt(result);

// Print original and shuffled
System.out.println(rndInt);
System.out.println(shuffled);

示例输出:

4769797
9497767

答案 1 :(得分:1)

//generate random number
String number = "73524896";

//put each digit in an element of a list
List<Character> numberList = new ArrayList<Character>();
for (char c : number.toCharArray()){
  numberList.add(c);
}

//shuffle
Collections.shuffle(numberList);

//output
String shuffledNumber = "";
for (Character c : numberList){
  shuffledNumber += c;
}
System.out.println(shuffledNumber);

答案 2 :(得分:0)

这会对您有所帮助:Random Numbers - shuffling

不是完整的代码,只是链接中的代码段

Random rgen = new Random();  // Random number generator
int[] cards = new int[52];  

//--- Initialize the array to the ints 0-51
for (int i=0; i<cards.length; i++) {
    cards[i] = i;
}

//--- Shuffle by exchanging each element randomly
for (int i=0; i<cards.length; i++) {
    int randomPosition = rgen.nextInt(cards.length);
    int temp = cards[i];
    cards[i] = cards[randomPosition];
    cards[randomPosition] = temp;
}

答案 3 :(得分:0)

将其转换为字符串,获取字符数组,然后将字符数组随机化,然后将其转换回字符串。

可以让你随机化任何字符串,而不仅仅是数字。

答案 4 :(得分:0)

我想说最简单的方法是将整数解析为String,重新排列String中的数字,然后将其解析回整数。

public int rearrange(int num){
  StringBuilder asStr = new StringBuilder(num + ""); //convert to string

  inplaceShuffle(asStr);


  return Integer.parseInt(asStr.toString());

}

答案 5 :(得分:0)

(1)将数字转换为字符串

(2)使用标准shuffling algorithm来洗牌人物

(3)转换回数字

答案 6 :(得分:0)

Collections.shuffle()获取一个列表并返回一个列表,其中包含toArray()Arrays.asList()接受一个数组并返回一个列表。 String有一个toCharArray()和一个接受char数组的构造函数。整数有toString()valueOf()