for循环中错误的分号
当我完成任务时,我通过放置一个小错误; 在for循环中,如下面的代码。
for(i=0;i<n;i++);{ n=n*i; }
当我编译程序时,它编译时没有错误,但我没有得到输出一段时间。 然后后来发现我错误地将分号放入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。
如果你在for循环后放置分号,那么它在技术上是正确的语法。 因为它被认为是一个空语句 – 这意味着什么都不执行。
在你的情况下 –
for(i=0;i
一个空语句最多执行n
次。 或者换句话说, for-loop
只运行n
次。
for循环后的花括号{}
仅执行一次。 现在,花括号{}
内的代码块被视为浮动块 。
当你这样做: for(i=0;i
for(i=0;i
这也适用于while
循环: while(..);{
。 额外的;
将只执行一次。
if
语句也是如此。 if(a==b);{
仍然会出于同样的原因执行
。 如果a == b
,则将考虑空语句。 之后,
将被执行。 这可能会给人一种错误的印象,即Java将false
视为true
因为如果a != b
,那么,
仍然会被执行。
for
循环只能执行一个代码块或一个语句,甚至是空语句。 所以这里的分号代表空语句(什么都不做的语句)。
换句话说,你可以想到for(int i; i
for(int i; i
所以代码就像
for(int i; i
和...一样
for(int i; i
和
for(int i; i
很简单
for(int i; i
关于
int i, n=1; for(i=1; i<=5; i++); n=n*i; System.out.println(n);
我得到以下代码的输出为6而不是120。
如前所述,您的代码
for(i=1; i<=5; i++); n=n*i;
和...一样
for(i=1; i<=5; i++){} n=n*i;
这意味着你的循环不会执行n=n*i
但会尝试执行{}
,它什么都不做。 同样在每次迭代结束时,由于i++
, i
将增加,所以当i
将变为5
你和i<5
将是错误的控制流将离开循环并将执行n=n*5
这意味着n将变为n=1*5
即5
。
如果你想通过在每个循环中执行n=n*i
得到结果120
,只需在循环后删除分号。
for(i=1; i<=5; i++)//<--removed semicolon n=n*i;
BTW更喜欢放置应该由循环执行的代码或if
代码块中的语句,
for(i=1; i<=5; i++){ n=n*i; }
这使您的代码更易于阅读和维护。 此外,如果你再次犯错,你将使用一些自动格式化工具,它将为你缩进你的代码,你会发现它将被格式化为
for(i=1; i<=5; i++) ; { n=n*i; }
这使得发现这样的错误非常容易。
你没有得到输出,因为分号结束了语句,[for(I = 0; I 代码应该是:
for(i=0;i
你得到6的原因很简单。 在最后一次迭代中,i的值从5变为6,循环将不再进行另一次迭代,因为i = 6并且它不再满足for loop
的条件。 由于n = 1且i = 6,因此n * i的输出为6。