2011-10-31 187 views
0

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

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); 
     } 

     } 

    } 
+0

顺便说一句,'一*了'是* *的方式比'Math.pow快(一,二)' –

回答

3

您的代码仅打印3 4 5,因为它只运行for循环的迭代。 在你的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

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

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

接下来你有你的循环中测试条件(即其中...)是。不要将输出条件与循环条件混淆(循环终止时)。