使用“for-loops”

时间:2011-10-31 10:58:22

标签: java for-loop

我正在使用“Java如何编程”(Deitel和Deitel)学习Java。 现在我正在解决一个练习,要求我打印出一张表格,其中包含500以下“毕达哥拉三重奏”的所有可能值。我应该使用嵌套的“for-loop”来检查所有可能性。换句话说:a,b和c必须是整数。以下表达式必须为真:a2 + b2 = c2,程序应打印一个包含所有可能组合的表(c <500)。我无法理解这一点。谁能帮帮我吗? 我的代码只打印出第一个组合(3 4 5),如下所示:

    public class Pythagoras 
            {
        public static void main(String[] args) 
            {

            for (int a = 3, b = 4, c = 5; (Math.pow(a, 2) + Math.pow(b, 2) == Math.pow(c, 2)) && (c <= 500); c++)
        {
        System.out.printf("%d %20d %20d", a, b, c);
        }

        }

    }

2 个答案:

答案 0 :(得分:3)

您的代码仅打印3 4 5,因为它只运行for循环的1次迭代。 在for循环中,每次迭代都会放大c,但不要更改a和b。 这意味着在第一次迭代之后,它将评估3^2 + 4^2 == 6^2,它返回false并因此退出for循环。

要解决此问题,您可以使用三个嵌套的for循环:

for(int a = 1; a < 500; a++){
   for(int b = 1; b < 500;b++){
       for(int c = 1; c < 500;c++){
           if(Math.pow(c,2) == Math.pow(a,2) + Math.pow(b,2){
                // code execution
           }
       }
   }
}

答案 1 :(得分:1)

正如您所说,您应该有嵌套循环,即对于每个变量abc,您应该有一个单独的循环测试所有可能的值:

for(int a = 1; a <= 500; a++) {
  for(int b = 1; b <= 500; b++) {
    for(int c = 1; c <= 500; c++) {
      ...
    }
  }
}

接下来,您有一个在循环内测试的条件(即...)。不要将输出条件与循环条件混淆(当循环终止时)。