我正在尝试为方程式找到一组给定的数字

x^3 + y^3 = z^3 +1


哪里

x < y < z


下面的代码是我开始从事的工作。我目前遇到的问题是我只在程序的第一次运行时才生成随机数,而且我无法弄清楚为什么要对如何改进我的代码提供任何帮助或线索。

import java.util.Random;

public class etude14 {

static int x = 1;
static int y = 2;
static int z = 3;
static int matchCount = 0;

public static void main(String[] args) {
    while(matchCount < 23){
     equatition(x, y, z);
    }
}

public static void equatition(int x, int y, int z) {

    double leftResult = Math.pow(x, 3) + Math.pow(y, 3);
    double rightResult = Math.pow(z, 3) + 1;

    if (leftResult == rightResult) {
        System.out.println("Match " + x + " " + y + " " + z);
        matchCount++;
        changeX();
    } else {
        System.out.println("No Match " + x + " " + y + " " + z);
        changeX();
    }
}

private static void changeX() {

     Random generator = new Random();
    int x2 = generator.nextInt(10000) + 1;
    int y2 = generator.nextInt(10000) + 1;
    int z2 = generator.nextInt(10000) + 1;

    if(x < y && y < z){
        System.out.println("WE HAVE NEW X,Y,Z");
        x = x2;
        y = y2;
        z = z2;
        return;
    }
    System.out.println("CHANGING X");
}
}


第一个答案后的代码

import java.util.Random;


公开课etude14 {

static int x = 1;
static int y = 2;
static int z = 3;
static int matchCount = 0;

public static void main(String[] args) {
    while (matchCount < 23) {
        equatition(x, y, z);
    }
}

public static void equatition(int x, int y, int z) {

    double leftResult = Math.pow(x, 3) + Math.pow(y, 3);
    double rightResult = Math.pow(z, 3) + 1;

    if (leftResult == rightResult) {
        System.out.println("Match " + x + " " + y + " " + z);
        matchCount++;
        changeX();
    } else {
        System.out.println("No Match " + x + " " + y + " " + z);
        changeX();
    }
}

private static void changeX() {

    Random generator = new Random();

    int x2 = 1;
    int y2 = 1;
    int z2 = 1;

    if (x < y && y < z) {
        System.out.println("WE HAVE NEW X,Y,Z");
        x = x2;
        y = y2;
        z = z2;
        return;
    } else {
        x2 = generator.nextInt(10000) + 1;
        y2 = generator.nextInt(10000) + 1;
        z2 = generator.nextInt(10000) + 1;
        System.out.println("CHANGING X");

    }

}


}

输出

No Match 1 2 3


我们有新的X,Y,Z
比赛1 1 1
改变X
比赛1 1 1
改变X
比赛1 1 1
改变X
比赛1 1 1
改变X
比赛1 1 1
改变X
比赛1 1 1
改变X
比赛1 1 1
改变X
比赛1 1 1
改变X
比赛1 1 1
改变X
比赛1 1 1
改变X
比赛1 1 1
改变X
比赛1 1 1
改变X
比赛1 1 1
改变X
比赛1 1 1
改变X
比赛1 1 1
改变X
比赛1 1 1
改变X
比赛1 1 1
改变X
比赛1 1 1
改变X
比赛1 1 1
改变X
比赛1 1 1
改变X
比赛1 1 1
改变X
比赛1 1 1
改变X
比赛1 1 1
改变X

最佳答案

当z变小时,随机生成器“停止”生成。

在这种情况下,条件if(x2 < y2 && y2 < z2)很少会被验证,因此您的号码不会改变。

您需要类似

private static void changeX() {

    Random generator = new Random();
    int x2 = generator.nextInt(10000) + 1;
    int y2 = generator.nextInt(10000) + 1;
    int z2 = generator.nextInt(10000) + 1;

    x = Math.min(Math.min(x2, y2), z2); // The Max of the 3 numbers

    z = Math.max(Math.max(x2, y2), z2); // The Min of the 3 numbers

    if (x != x2 && z != x2) { // The remaining middle number
        y = x2;
    } else if (x != y2 && z != y2) {
        y = y2;
    } else {
        y = z2;
    }

}


或许

private static void changeX() {

    Random generator = new Random();

    List<Integer> listInt = new ArrayList<Integer>();

    int x2 = generator.nextInt(10000) + 1;
    listInt.add(x2);
    int y2 = generator.nextInt(10000) + 1;
    listInt.add(y2);
    int z2 = generator.nextInt(10000) + 1;
    listInt.add(z2);

    Collections.sort(listInt);

    x = listInt.get(0);
    y = listInt.get(1);
    z = listInt.get(2);

}

08-29 00:52