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

在java中有没有一种简单的方法来重新排列一个数字?,java,arrays,integer,Java,Arrays,Integer,基本上,在坚果壳中,我想取一个随机数,比如: 73524896 我想给我们相同的数字,但随机地重新排列如下: 46932857 有没有一种方法可以在java中轻松实现这一点?这将帮助您: 不是完整的代码,只是链接中的一个片段 Random rgen = new Random(); // Random number generator int[] cards = new int[52]; //--- Initialize the array to the ints 0-51 for (

基本上,在坚果壳中,我想取一个随机数,比如:

73524896
我想给我们相同的数字,但随机地重新排列如下:

46932857
有没有一种方法可以在java中轻松实现这一点?

这将帮助您:

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

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;
}
Random rgen=new Random();//随机数发生器
int[]卡=新int[52];
//---将阵列初始化为整数0-51

对于(inti=0;i这是我最喜欢的解决方案。(请注意,所有洗牌的概率都相同。)


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


这将允许您随机化任何字符串,而不仅仅是数字。

我认为最简单的方法是将整数解析为字符串,重新排列字符串中的数字,然后将其解析回整数

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

  inplaceShuffle(asStr);


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

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

(2) 使用标准来洗牌字符

(3) 转换回一个数字

集合。shuffle()
获取一个列表并返回一个列表,其中包含一个
toArray()
数组。asList()
获取一个数组并返回一个列表。String包含一个
tocharray()
和一个接受字符数组的构造函数。Integer包含
toString()
valueOf()

//生成随机数
字符串编号=“73524896”;
//将每个数字放入列表的一个元素中
List numberList=new ArrayList();
for(字符c:number.toCharArray()){
数字列表。添加(c);
}
//洗牌
收藏。洗牌(数字列表);
//输出
字符串shuffledNumber=“”;
for(字符c:数字列表){
随机数+=c;
}
System.out.println(shuffledNumber);

对不起,这只是一个例子。我会解决它。他们为什么在这个问题上的票数很接近?这是因为欧拉计划的问题吗?为什么这不是一个真正的问题?是的,这很好!谢谢。我可以在7分钟内接受。如上所述,是随机的,但不是完全随机的随机洗牌。@Neil:继续,请解释一下你的意思?你在评论之前访问过链接吗?我不需要访问链接,我知道一个简单的反例。如果有3个东西需要洗牌,那么有6个洗牌,但是你的循环同样随机地生成27个排列。因此,你不能同样随机地生成6个洗牌。@Neil,这是一个非常棒的解释。你有没有想到我或者你是从什么地方听说的?我的答案,但是有代码,而且更快。doubleplus很好!我已经用链接回答了,你提供了代码:)也可以使用集合。shuffle(Arrays.asList(chars));shuffle()只适用于对象,而不适用于基本类型。嗯,不是吗?如果
rnd.nextInt
返回一个统一的随机数,每个元素新pos应该均匀分布,没有?不完整(Arrays.asList在
char[]
上不起作用)您需要一个库函数(例如commons collections或guava,或roll your own)来实现这一点。当然,你是对的。我想您也可以使用“\\d”进行拆分,而不是获取字符数组。这不是很有效,但是。。。然后我必须有一个不存在的String.join()。
4769797
9497767
public int rearrange(int num){
  StringBuilder asStr = new StringBuilder(num + ""); //convert to string

  inplaceShuffle(asStr);


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

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