我正在使用"Java how to program“(Deitel和Deitel)学习Java。现在,我被困在解决一个练习中,这个练习要求我打印出一个表,其中所有可能的"pythagoran tripples“值都在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);
}
}
}发布于 2011-10-31 19:06:52
您的代码只打印3 4 5,因为它只运行for循环的一次迭代。在for循环中,每次迭代都放大c,但不更改a和b,这意味着在第一次迭代之后,它将计算返回false的3^2 + 4^2 == 6^2,从而退出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
}
}
}
}发布于 2011-10-31 19:04:20
正如你所提到的,你应该有嵌套的循环,即对于每个变量a,b和c,你应该有一个单独的循环来测试所有可能的值:
for(int a = 1; a <= 500; a++) {
for(int b = 1; b <= 500; b++) {
for(int c = 1; c <= 500; c++) {
...
}
}
}接下来,您需要在循环中测试一个条件(即...所在的位置)。不要将输出条件与循环条件混淆(当循环终止时)。
https://stackoverflow.com/questions/7952751
复制相似问题