用Java中的两个变量解决一个困难的等式

时间:2012-01-11 20:42:50

标签: java equation-solving

我的任务是说要做以下事项:
Search2:搜索x * x + y * y的解 - 12x -10y + 36 = 0.在x和y中搜索0到10,搜索每个y值,然后移动到下一个x。打印找到的前三个解决方案。 (注意 - 带标签的休息在这里很方便!)

我无法弄清楚这个的逻辑。我想我必须使用2个以上的循环但不确定 这是我到目前为止(它只是重复(6,0)):

for (int j = 0; j <= 10; j++) {
    for (int i = 0; i <= 10; i++) {
        while (((i * i) + (j * j) - (12 * i) - (10 * j) + 36) == 0) {
            System.out.println("(" + i + ", " + j + ")");  
        }  
    }  
}  

UPDATE
这是解决方案:

    int t = 0;

    for (int i = 0; i <= 10; i++) {
        if (t == 3) {
            break;
        }
        for (int j = 0; j <= 10; j++) {
            if (((i * i) + (j * j) - (12 * i) - (10 * j) + 36) == 0) {
                System.out.println("(" + i + ", " + j + ")");
                t++;
            }
        }
    }

7 个答案:

答案 0 :(得分:2)

尝试并不错。因为你离我很近,我会告诉你一个有效的解决方案。基本上,你需要做三件事:

  1. while更改为if
  2. 使用变量计算找到解决方案的次数,因此您可以停在三个
  3. 添加标签,以便从内循环中突破外循环
  4. 为了清晰起见,我还建议您使用与问题相同的变量名称 - 即xy

    int count = 0;
    outerLoop:
    for (int y = 0; y <= 10; y++) {
        for (int x = 0; x <= 10; x++) {
            if (x * x + y * y - 12 * x - 10 * y + 36 == 0) {
                System.out.println("(" + x + ", " + y + ")");  
                if (++count == 3)
                    break outerLoop;
            }
        }
    }
    

    执行时,此代码生成:

    (6, 0)
    (3, 1)
    (9, 1)
    

    很抱歉用勺子喂你,但这里的部分课程是良好的编码风格和练习。

答案 1 :(得分:0)

你正在使用一个额外的while循环,它会无限运行。

while (((i * i) + (j * j) - (12 * i) - (10 * j) + 36) == 0) {
    System.out.println("(" + i + ", " + j + ")");  
}

第一次评估为true时 - 即当它达到(6,0)时 - 它将继续运行,因为ij未被修改。

您需要将其替换为if

答案 2 :(得分:0)

仔细看看你内在的while循环。一旦找到方程的解,ij永远不会改变,公式总是计算为0,导致无限循环。

为清楚起见,将ij重命名为x和y也可能是明智之举。尽管如此,你大部分都在正确的轨道上。不要忘记你只需打印前三个解决方案。

答案 3 :(得分:0)

我不会帮助你很多,因为这是一个非常简单的概念,但想想你需要循环的东西,它可能会更容易使用i或j的x和y instad。也是你的打印(6,0),因为这正是你告诉它用while循环做的。

一个提示,你的while循环应该有一个停止其功能的语句,假设x&lt; 4,如果它更大或=比它将继续在循环之外。

答案 4 :(得分:0)

public class EquationSolver {

    public static void main(String[] args) {

        int found = 0;
        searchSolutions:
        for (int y = 0; y <= 10; y++) {
            for (int x = 0; x <= 10; x++) {
                if (((x * x) + (y * y) - (12 * x) - (10 * y) + 36) == 0) {
                    System.out.println("(" + x + ", " + y + ")");
                    found ++;
                    if (found == 3) {
                        break searchSolutions;
                    }
                }
            }

        }

    }

}

答案 5 :(得分:0)

很长一段时间我上次写了一些类似的作业......只是为了它的乐趣:)

public class Main {

    public static void main(String[] args) {
        int[] range = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
        boolean isSolutionFound = Boolean.FALSE;
        int solCounter = 0;

        searchSolutions:
        for (Integer y : range) {
            for (Integer x : range) {
                isSolutionFound = checkForSolution(x, y);
                if (isSolutionFound) {
                    printSolution(x, y);
                    solCounter++;
                }

                if (solCounter == 3) 
                    break searchSolutions;
            }
        }
    }

    private static void printSolution(Integer x, Integer y) {
        System.out.println(x + "," + y); // use some fancy formatting instead
    }

    private static boolean checkForSolution(int x, int y) {
        if (x * x + y * y - 12 * x - 10 * y + 36 == 0)
            return true;
        else
            return false;
    }

}

答案 6 :(得分:-2)

for (int j = 0; j <= 10; j++)
{
   for (int i = 0; i <= 10; i++)
   {
      if (((i * i) + (j * j) - (12 * i) - (10 * j) + 36) == 0)
      {
         System.out.println("(" + i + ", " + j + ")");
         return;
      }  
   }  
} 

要记住return;部分是重要的,否则您仍会搜索解决方案,尽管您已经找到了解决方案。如果你没有更多的解决方案,那么你应该省略'return'声明。