“随机”;“拆分”;Java中整数值的定义

“随机”;“拆分”;Java中整数值的定义,java,random,Java,Random,有趣的问题,希望有人知道如何在Java中做到这一点。我有 一个固定的整数值x,我想用一个整数x1,x2,…,xn的和来表示 使以下各项适用: x = x1 + x2 + ... + xn; 例如,假设n=3,x=10 10 = 5 + 3 + 2; 问题是,x1,x2。。。xn共享应该是均匀分布的,每次我想要将x值“分割”到不同的共享中,它们应该是不同的 有人知道怎么做吗 谢谢, Patrick未经测试,也可能效率不高,但应能工作: public static int[] sumNumber

有趣的问题,希望有人知道如何在Java中做到这一点。我有 一个固定的整数值x,我想用一个整数x1,x2,…,xn的和来表示 使以下各项适用:

x = x1 + x2 + ... + xn;
例如,假设n=3,x=10

10 = 5 + 3 + 2;
问题是,x1,x2。。。xn共享应该是均匀分布的,每次我想要将x值“分割”到不同的共享中,它们应该是不同的

有人知道怎么做吗

谢谢,
Patrick

未经测试,也可能效率不高,但应能工作:

public static int[] sumNumbers(int number, int parts) {
    int[] result = new int[parts];
    int sum = 0;
    Random random = new Random();
    for (int i = 1; i < result.length; i++) {
        // here is the uneffecient part:
        int rand = random.nextInt(number);
        if (sum + rand < number) {
            result[i] = rand;
            sum += rand;
        } else {
            i--;
        }
    }
    result[0] = number - sum;
    return result;
}
publicstaticint[]sumNumbers(int-number,int-parts){
int[]结果=新的int[部分];
整数和=0;
随机=新随机();
for(int i=1;i
这可能是无效的,因为您可能有以下情况:
你把100分成25个数字。假设随机选择的前5个数加起来接近100,那么你必须等待20个数中的其余数随机变小。

这是可行的,我们的想法是采用最大上限为x-(n-i)的随机数,即第一个元素必须上限为8,以避免下一个数变为零。我假设需要正数,其和为x

Random random = new Random(System.currentTimeMillis());        
for (int i = 0; i < n -1; i++) {
   int j = random.nextInt(x - (n -i)) + 1;
   System.out.println(j);
   x -= j;
}
System.out.println(x);
Random Random=new Random(System.currentTimeMillis());
对于(int i=0;i
我做了类似的事情:

  int remainder = 0;
  int n = 3;
  int max = 2000;

  for(int i = 1; i <= n; i++)
  {
    int ct = 0;

    if(i < n)
      ct = ThreadLocalRandom.current().nextInt(0, (max - remainder));
    else
      ct = max - remainder;

    System.out.println("Value " + i + " :" + ct);

    remainder += contCt;
  }
int余数=0;
int n=3;
int max=2000;

对于(int i=1;i)你所说的“均匀分布”是什么意思?你是说如果可能的话,x1!=x2!=x3…!=xn?你的方程很混乱,x1+x2表示x*1和x*2,但你把它们等同于x。分裂的均匀性是什么?
10=25+75+(-90)< /代码>也是可能的吗?通过不规则分布,我的意思是,在0和x之间的范围内,任何值席的可能性都应该等于表示“X”的值中的“共享”,该值构成了该代码的值,它不会按照要求产生不同的分裂值。循环。你说的不同的分割值是什么意思?我想
n
x
是给定的?我已经说过,它可能会运行很长时间。如果一个参数是非法的?或者你的rand每次都是0呢?然后结果[0]包含数字本身?当然,他必须检查参数。现在我知道你使用不同的分割值是什么意思了。如果没有相同的分割值,或者数字本身和尾随的0,他如何将2分割成2个数字?我认为OP需要唯一的数字,所以加数不能出现两次。如果
random.nextInt(n)
返回
n-1
。所有下一个生成的
j
值将是
1