- 此问题在此处已有答案**:
Having issue with the concept of extra semi-colon at the end of for loop in Java(5个答案)
2天前关闭。
当我在做作业的时候,我犯了一个小错误:像下面的代码一样。
for(i=0;i<n;i++);{
n=n*i;
}
当我编译程序的时候,它编译的没有错误,但是我有一段时间没有得到输出。然后后来发现我在for循环中放错了分号。当我在for循环后面放分号的时候,是什么错误?
class A
{
public static void main(String args[])
{
int i, n=1;
for(i=1; i<=5; i++);
n=n*i;
System.out.println(n);
}
}
下面代码的输出是6而不是120。
5条答案
按热度按时间bksxznpy1#
执行此操作时:
for(i=0;i<n;i++);
您实际上是在执行以下操作:for(i=0;i<n;i++) {}
。这将转换为没有主体的循环。while
循环也会发生这种情况:while(..);{<Foo>}
。额外的;
将仅执行一次。if
语句也是如此。执行if(a==b);{<Foo>}
仍然会执行<Foo>
,原因是相同的。如果a == b
,则,空语句将被考虑在内。之后,<Foo>
将被执行。这可能会给人错误的印象,Java会将false
视为true
,因为如果a != b
,则,<Foo>
仍将被执行。envsm3lx2#
for
循环只能执行一个代码块或一条语句,甚至是空语句,所以这里的分号表示空语句(不做任何事情的语句)。换句话说,您可以将
for(int i; i<n; i++);
视为for(int i; i<n; i++){}
。所以代码就像
同
以及
就是
关于
下面代码的输出是6而不是120。
如前所述,代码
同
这意味着如果你的循环不执行
n=n*i
,但会尝试执行{}
,而{}
什么也不做。同样,在每次迭代结束时,i
将因i++
而递增,因此当i
变为5
时,您的和i<5
将为假,控制流将离开循环并执行n=n*5
,这意味着n将变成了n=1*5
也就是5
。如果你想通过在每个循环中执行
n=n*i
得到120
的结果,只需删除循环后的分号。顺便说一句,更喜欢将应该由循环或
if
语句执行代码放在代码块中,这使得你的代码更容易阅读和维护。而且如果你再次犯错误,你将使用一些自动格式化工具,这将缩进你的代码,你会看到它将格式化为
这使得发现这样的错误非常容易。
w3nuxt5m3#
如果你把分号放在for循环后面,那么它在技术上是正确的语法。因为它被认为是一个空语句--这意味着什么都不执行。
就你而言-
最多执行
n
次的空语句。或者换句话说,for-loop
只运行n
次。for循环后面的花括号
{}
只执行了一次,现在花括号{}
内的代码块被认为是floating block。ybzsozfc4#
您没有得到输出,因为分号结束了语句[ for(I = 0;I〈n; I++ ]
代码应为:
rdrgkggo5#
得到6的原因很简单,在最后一次迭代中,i的值从5变为6,循环不会再进行另一次迭代,因为i=6,它不再满足
for loop
的条件,因为n=1,i=6,那么n*i的输出是6。