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*55

如果你想通过在每个循环中执行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。