Java 如何让随机数生成器生成两个和为60,差为14的随机整数

Java 如何让随机数生成器生成两个和为60,差为14的随机整数,java,Java,我有这个密码,开始还是我的审判 do{ //Do statement, change the rnd number for x and y each time fin is incremented x = rnd.nextInt(31); y = rnd.nextInt(31); z = x+y; if(z == 60); // Sum of x and y HAVE to equal sixty. { System.out.println(x+" "+y);

我有这个密码,开始还是我的审判

do{ //Do statement, change the rnd number for x and y each time fin is incremented
  x = rnd.nextInt(31);
  y = rnd.nextInt(31);
  z = x+y;

  if(z == 60); // Sum of x and y HAVE to equal sixty.
    {
     System.out.println(x+" "+y);
     fin++;// Just used to increment the fin, just to give my loop an end.
    }
}while(fin!=30)

首先,它总是打印出x和y的两个随机数。然而,它从未打印出等于60的值。但是我的if语句声明,如果z(x+y)等于60,那么打印出x+y。我的错误是什么。此外,我如何使用for循环生成这些值,使其差值仅为14?

您需要学习基本代数:

x+y = 60   -> y = 60 - x

x-y = 14   -> x - (60 - x) = 14 
           -> x - 60 + x = 14
           -> 2x -60 = 14
           -> 2x = 74
           -> x = 37

y = 60 - x -> y = 60 - 37
              y = = 23
检查:

23 + 37 = 60
37 - 23  = 14

为此运行随机数生成循环毫无意义,因为只有两个数字可以满足条件。

恐怕您误用了该方法:

Random.nextInt(int n);

实际上,它返回一个从0到n-1的随机数。请参阅以供参考。

如果您希望彻底证明满足您的条件的有效对,您可以使用单个
for
循环,从
0
60
等等

public static void main(String[] args) {
    for (int x = 0; x < 60; x++) {
        int y = 60 - x;
        int max = Math.max(x, y);
        int min = Math.min(x, y);
        if (max - min == 14) {
            System.out.printf("%d, %d%n", x, y);
        }
    }
}

你知道只有一种可能的x和y组合具有这个属性吗?打字错误。如果(z==60),则删除
后面的分号。它终止
if
主体。这意味着下一个块没有按照您的想法执行。您想要一个程序来显示37+23=60和37-23=14吗?请注意,您正在生成两个小于31的数字。这意味着它们永远不会满足条件,因为37不在[0,31)范围。@Thevenin为什么停在那里?威尔感觉被忽略了。哈哈,巴德,我在做微积分。我知道这一点,非常简单。我正在制作一个程序来证明这是真的。很容易就像…23+37=60,差14。我试图证明这是真的。以上就是你所需要的。发射随机数不会证明任何东西都可以。实际上有无限多的2个数字对,在所有无限多的组合中,23/37是唯一能满足要求的两个。你必须测试每一个可能的对组合,这显然是不可能的。@Dilon-1)这是代数,而不是微积分。2)你不能通过抽样令人信服地证明它是正确的。用数字(非代数)显示/证明这一点的唯一方法是通过穷举搜索…这是不可能的,因为搜索空间是无限的。没错,我看到我的逻辑有缺陷。对不起,伙计,我没有批判性地思考这个问题。但是如果没有整数解,这种方法就会失败。@StephenC它怎么会失败?如果没有解,它就不会产生任何输出。这比生成两个随机数更好整数,只测试其中一个条件。如果解是分数呢?OP的标题指定了整数。这是两个不等式。约束非常基本。
23, 37
37, 23