[英]Working with “for-loops”
我正在使用“ 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);
}
}
}
您的代码仅显示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
}
}
}
}
如您所述,您应该具有嵌套循环,即对于每个变量a
, b
和c
您应该有一个单独的循环来测试所有可能的值:
for(int a = 1; a <= 500; a++) {
for(int b = 1; b <= 500; b++) {
for(int c = 1; c <= 500; c++) {
...
}
}
}
接下来,您有一个条件要在循环内测试(即...
)。 不要将输出条件与循环条件混淆(循环终止时)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.