Java 对于要考虑哪个值的循环混淆

Java 对于要考虑哪个值的循环混淆,java,for-loop,while-loop,Java,For Loop,While Loop,我这里有一个循环: while(n != 0) { ld = n % 10; System.out.println(ld); for ( i=1; i <= ld; i++) { f = f * i; } System.out.println(f); n /= 10; } while(n!=0) { ld=n%10; 系统输出打印项

我这里有一个循环:

while(n != 0)
    {
        ld = n % 10;
        System.out.println(ld);

        for ( i=1; i <= ld; i++)
        {
            f = f * i;
        }

        System.out.println(f);

        n /= 10;
    }
while(n!=0)
{
ld=n%10;
系统输出打印项次(ld);

对于(i=1;i而言,问题不在于
ld
。在每次迭代中,您忘记重置
f

while(n != 0)
{
    ld = n % 10;
    System.out.println(ld);
    f = 1; // reset f
    for ( i=1; i <= ld; i++)
    {
        f = f * i;
    }

    System.out.println(f);

    n /= 10;
}

问题不在于
ld
。您忘记了在每次迭代中重置
f

while(n != 0)
{
    ld = n % 10;
    System.out.println(ld);
    f = 1; // reset f
    for ( i=1; i <= ld; i++)
    {
        f = f * i;
    }

    System.out.println(f);

    n /= 10;
}

使用完一个数字后,您需要重置
f
。 在while循环中输入时添加
f=1;

解决方案

      while(n != 0)
        {
            ld = n % 10;
            f = 1;// add this
            System.out.println(ld);

            for (int i=1; i <= ld; i++)
            {
                f = f * i;
            }

            System.out.println(f);

            n /= 10;
        }
while(n!=0)
{
ld=n%10;
f=1;//添加这个
系统输出打印项次(ld);

对于(int i=1;i您需要在使用一个数字后重置
f
。 在while循环中输入时添加
f=1;

解决方案

      while(n != 0)
        {
            ld = n % 10;
            f = 1;// add this
            System.out.println(ld);

            for (int i=1; i <= ld; i++)
            {
                f = f * i;
            }

            System.out.println(f);

            n /= 10;
        }
while(n!=0)
{
ld=n%10;
f=1;//添加这个
系统输出打印项次(ld);
对于(inti=1;i最重要的:

  • 现在我们的循环每次“重复”都会将f重置为1
  • 其他:

  • 在for循环中添加了
    int i=1
  • 您可以使用
    f*=1;
    代替
    f=f*1;
  • 为了更安全,将n!=0更改为n>0

    而(n>0) {

    ld=n%10

    System.out.println(ld);
    
    f = 1;   
    
    
    for(int i = 1; i <= ld; i++)
    {
        f *= i;
    }
    
    System.out.println(f);
    
    
    n /= 10;   
    
    System.out.println(ld);
    f=1;
    对于(inti=1;i最重要的:

  • 现在我们的循环每次“重复”都会将f重置为1
  • 其他:

  • 在for循环中添加了
    int i=1
  • 您可以使用
    f*=1;
    代替
    f=f*1;
  • 为了更安全,将n!=0更改为n>0

    而(n>0) {

    ld=n%10

    System.out.println(ld);
    
    f = 1;   
    
    
    for(int i = 1; i <= ld; i++)
    {
        f *= i;
    }
    
    System.out.println(f);
    
    
    n /= 10;   
    
    System.out.println(ld);
    f=1;
    
    对于(inti=1;i您可以查看此代码,代码是ok的,只需要为给定数字的每个数字设置循环内f的值

    import java.util.*;
    import java.lang.*;
    import java.io.*;
    
    /* Name of the class has to be "Main" only if the class is public. */
    class Ideone
    {
        public static void main (String[] args) throws java.lang.Exception
        {
        int ld;
            int n=123;
    
        while(n != 0)
        {
                int f=1;
            ld = n % 10;
            System.out.println(ld);
    
            for ( int i=1; i <= ld; i++)
            {
                f = f * i;
            }
    
            System.out.println(f);
    
            n /= 10;
        }
        }
    }
    

    您可以查看此代码,代码正常,只需在给定数字的每个数字的循环中设置f值

    import java.util.*;
    import java.lang.*;
    import java.io.*;
    
    /* Name of the class has to be "Main" only if the class is public. */
    class Ideone
    {
        public static void main (String[] args) throws java.lang.Exception
        {
        int ld;
            int n=123;
    
        while(n != 0)
        {
                int f=1;
            ld = n % 10;
            System.out.println(ld);
    
            for ( int i=1; i <= ld; i++)
            {
                f = f * i;
            }
    
            System.out.println(f);
    
            n /= 10;
        }
        }
    }
    

    分享你的输出,你希望代码做什么你的for循环变得混乱了?你能澄清一下吗?你能澄清一下吗?好吧,我得到了我的答案谢谢大家!旁注:现在已经不是1985年了。绝对没有理由使用单字符作为变量名。给变量名说明它们的含义。然后:始终声明var可以有最小的作用域。意思是:如果你在while循环体中声明了“f”…那么你自己会更容易发现“嘿,f是什么时候初始化的,以及外部循环的后续运行会发生什么”分享你的输出,你希望代码做什么你的for循环变得混乱了?你能澄清一下吗?你能澄清一下吗?好吧,我得到了我的答案谢谢大家!旁注:现在已经不是1985年了。绝对没有理由使用单字符作为变量名。给变量名说明它们的含义。然后:始终声明var可以有最小的作用域。意思是:如果你在while循环体中声明了“f”…那么你自己会更容易发现“嘿,f是什么时候初始化的,以及外部循环的后续运行会发生什么”你太聪明了。太棒了。我已经投票给你的答案,并将在8分钟内接受它。你太聪明了。太棒了。我投票给你的答案,并将在8分钟内接受它。