为什么这不起作用? (Java for 循环条件部分)
Why is this not working? (Java for loop condition part)
int cnt = 0, sum = 0;
for(int i = 1; ((i <= 1000) && (i%3 == 0) && (i%5 == 0)); i++){
if(cnt >= 5)
break;
System.out.println(i);
sum += i;
cnt++;
}
System.out.println(sum);
我想得到[1, 1000]范围内的前5个能被3整除的数字和5个数字。这段代码没有显示任何错误,但它 returns 'sum' 和 'cnt' 都是默认值(即 0),在我看来它没有进入 for 循环。
P.S。我不是高级程序员。我正在尝试这些东西只是为了探索,所以如果有人能解释这背后的真正原因。
听起来你不明白 for 循环的工作原理。 @Silvio Mayolo
和 @experiment unit 1998X
评论了一些非常有用的链接。我鼓励您通读这些内容并熟悉它们。
在您的示例中,您的 for 循环有一个非常复杂的 header。
for(int i = 1; ((i <= 1000) && (i%3 == 0) && (i%5 == 0)); i++){
让我们把它分成几个部分。
for
-- 这是启动for循环的关键字
int i = 1;
-- 现在您已经在循环中创建了一个变量。它是一个名为 i
的 int
,起始值为 1
。
(the termination expression)
-- 如果终止表达式returns false
,则循环停止循环。让我们看看你是如何使用它的
i <= 1000
-- 现在你已经添加了一条规则 --> 为了让for循环执行一个循环,数字i
必须小于等于至 1000
。好的,这很简单,到目前为止,您现在至少有 1000 个 i
的有效值。
i%3 == 0
-- 现在你又增加了一条规则 --> 为了让循环执行循环,数字 i
除以时必须没有余数3. 不幸的是,这是一个问题,因为如前所述,i
的起始值为 1
,并且 1/3 确实有余数 。因此,循环甚至在开始之前就停止了。
这是你的问题。如果您想检查并查看是否 i%3 == 0
,则不应将该检查放在 终止表达式 中。它应该进入 for 循环中的封闭块内部。这同样适用于 i%5 == 0
.
这里有一个可运行的例子来帮助你理解。
public class SOQ_20220516
{
public static void main(String[] args)
{
int cnt = 0;
int sum = 0;
for(int i = 1; i <= 1000; i++)
{
if(cnt >= 5)
{
break;
}
if ((i%3 == 0) && (i%5 == 0))
{
System.out.println(i);
sum += i;
cnt++;
}
}
System.out.println(sum);
System.out.println(cnt);
}
}
public class SOQ_20220516
{
public static void main(String[] args)
{
int cnt = 0;
int sum = 0;
for(int i = 1; i <= 1000; i++)
{
if(cnt >= 5)
{
break;
}
if ((i%3 == 0) && (i%5 == 0))
{
System.out.println(i);
sum += i;
cnt++;
}
}
System.out.println(sum);
System.out.println(cnt);
}
}
Blockquote
int cnt = 0, sum = 0;
for(int i = 1; ((i <= 1000) && (i%3 == 0) && (i%5 == 0)); i++){
if(cnt >= 5)
break;
System.out.println(i);
sum += i;
cnt++;
}
System.out.println(sum);
我想得到[1, 1000]范围内的前5个能被3整除的数字和5个数字。这段代码没有显示任何错误,但它 returns 'sum' 和 'cnt' 都是默认值(即 0),在我看来它没有进入 for 循环。
P.S。我不是高级程序员。我正在尝试这些东西只是为了探索,所以如果有人能解释这背后的真正原因。
听起来你不明白 for 循环的工作原理。 @Silvio Mayolo
和 @experiment unit 1998X
评论了一些非常有用的链接。我鼓励您通读这些内容并熟悉它们。
在您的示例中,您的 for 循环有一个非常复杂的 header。
for(int i = 1; ((i <= 1000) && (i%3 == 0) && (i%5 == 0)); i++){
让我们把它分成几个部分。
for
-- 这是启动for循环的关键字int i = 1;
-- 现在您已经在循环中创建了一个变量。它是一个名为i
的int
,起始值为1
。(the termination expression)
-- 如果终止表达式returnsfalse
,则循环停止循环。让我们看看你是如何使用它的i <= 1000
-- 现在你已经添加了一条规则 --> 为了让for循环执行一个循环,数字i
必须小于等于至1000
。好的,这很简单,到目前为止,您现在至少有 1000 个i
的有效值。i%3 == 0
-- 现在你又增加了一条规则 --> 为了让循环执行循环,数字i
除以时必须没有余数3. 不幸的是,这是一个问题,因为如前所述,i
的起始值为1
,并且 1/3 确实有余数 。因此,循环甚至在开始之前就停止了。
这是你的问题。如果您想检查并查看是否 i%3 == 0
,则不应将该检查放在 终止表达式 中。它应该进入 for 循环中的封闭块内部。这同样适用于 i%5 == 0
.
这里有一个可运行的例子来帮助你理解。
public class SOQ_20220516
{
public static void main(String[] args)
{
int cnt = 0;
int sum = 0;
for(int i = 1; i <= 1000; i++)
{
if(cnt >= 5)
{
break;
}
if ((i%3 == 0) && (i%5 == 0))
{
System.out.println(i);
sum += i;
cnt++;
}
}
System.out.println(sum);
System.out.println(cnt);
}
}
public class SOQ_20220516 {
public static void main(String[] args) {
int cnt = 0;
int sum = 0;
for(int i = 1; i <= 1000; i++)
{
if(cnt >= 5)
{
break;
}
if ((i%3 == 0) && (i%5 == 0))
{
System.out.println(i);
sum += i;
cnt++;
}
}
System.out.println(sum);
System.out.println(cnt);
}
}
Blockquote