java for循环中分号放错位置[重复]

xggvc2p6  于 2023-01-24  发布在  Java
关注(0)|答案(5)|浏览(136)
    • 此问题在此处已有答案**:

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。

bksxznpy

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>仍将被执行。

envsm3lx

envsm3lx2#

for循环只能执行一个代码块或一条语句,甚至是空语句,所以这里的分号表示空语句(不做任何事情的语句)。
换句话说,您可以将for(int i; i<n; i++);视为for(int i; i<n; i++){}
所以代码就像

for(int i; i<n; i++);{
    foo();
}

for(int i; i<n; i++){
    //do nothing, except i++
}
//after loop finishes 
{
    foo();
}

以及

for(int i; i<n; i++);
    foo();

就是

for(int i; i<n; i++){
}
foo();

关于

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;

顺便说一句,更喜欢将应该由循环或if语句执行代码放在代码块中,

for(i=1; i<=5; i++){
    n=n*i;
}

这使得你的代码更容易阅读和维护。而且如果你再次犯错误,你将使用一些自动格式化工具,这将缩进你的代码,你会看到它将格式化为

for(i=1; i<=5; i++)
    ;
{
    n=n*i;
}

这使得发现这样的错误非常容易。

w3nuxt5m

w3nuxt5m3#

如果你把分号放在for循环后面,那么它在技术上是正确的语法。因为它被认为是一个空语句--这意味着什么都不执行。
就你而言-

for(i=0;i<n;i++);

最多执行n次的空语句。或者换句话说,for-loop只运行n次。
for循环后面的花括号{}只执行了一次,现在花括号{}内的代码块被认为是floating block

ybzsozfc

ybzsozfc4#

您没有得到输出,因为分号结束了语句[ for(I = 0;I〈n; I++ ]
代码应为:

for(i=0;i<n;i++) {
     n=n*1;
}
rdrgkggo

rdrgkggo5#

得到6的原因很简单,在最后一次迭代中,i的值从5变为6,循环不会再进行另一次迭代,因为i=6,它不再满足for loop的条件,因为n=1,i=6,那么n*i的输出是6。

相关问题