Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 仅使用一个while循环执行阶乘_Java_Math_Factorial - Fatal编程技术网

Java 仅使用一个while循环执行阶乘

Java 仅使用一个while循环执行阶乘,java,math,factorial,Java,Math,Factorial,我试图找到9到0的阶乘,只使用一个while循环,但我的想法不是输出一个值 我通过两个while循环找到了解决方法: int i; count = 9; while (count >= 0){ value = count; i = count-1; while (i > 0){ value = value * i; i--; } Sy

我试图找到9到0的阶乘,只使用一个while循环,但我的想法不是输出一个值

我通过两个while循环找到了解决方法:

    int i;
    count = 9;
    while (count >= 0){
        value = count;
        i = count-1;
        while (i > 0){
            value = value * i;
            i--;
        }
        System.out.print(value + ", ");
    }
这是可行的,但我尝试将其更改为仅使用一个while循环,并得到以下结果:

    int i;
    for (count = 9; count < 0; count--){
        value = count;
        i = count-1;
        while (i > 0){
            value = value * i;
            i--;
        }
        System.out.print(value + ", ");
    }
我不完全确定我是否正确地使用了for语句,但我认为我是正确的,或者至少我认为它应该输出一些东西,以便我可以调试它

谁能给我一个正确方向的提示吗

 count = 9;
sum=1;
while (count >= 1){
sum*=count;
--count;
 }
    System.out.print(sum);
它会给你9分=362880


它会给你9分=362880只需首先分配value=i,然后运行循环。您只能通过while循环获得阶乘

重要提示:因为n=n*n-1!,因此,i-必须在value=value*i之前执行

更新:如果您想计算0到9的阶乘,那么使用以下代码:它还包括0的阶乘

  public static void main(String args[]){
        int countLowest=0; 
        int countHighest=9; 
        int value=1;


                while (countLowest<= countHighest){
                if(countLowest==0)
                    value = value * (countLowest+1);
                else
                    value=value*countLowest;
                countLowest++;
                System.out.println("Factorial of "+(countLowest-1)+" is "+value);
                }

    }

只需首先指定value=i,然后运行循环。您只能通过while循环获得阶乘

重要提示:因为n=n*n-1!,因此,i-必须在value=value*i之前执行

更新:如果您想计算0到9的阶乘,那么使用以下代码:它还包括0的阶乘

  public static void main(String args[]){
        int countLowest=0; 
        int countHighest=9; 
        int value=1;


                while (countLowest<= countHighest){
                if(countLowest==0)
                    value = value * (countLowest+1);
                else
                    value=value*countLowest;
                countLowest++;
                System.out.println("Factorial of "+(countLowest-1)+" is "+value);
                }

    }

这将给出从9到1的所有阶乘:

int i=1;
int value=1;
String res = "";
while (i <= 9){
  value = value * i;
  res = value + ((i>1)?",":"") + res;
  i++;
}
System.out.print(res);
也许这是作弊,因为我是从1开始按升序计算阶乘的!到9点!,但是为了得到所需的结果,我颠倒了输出的顺序

编辑:

如果你也想要0!要打印,一个小的变化可以做到:

int i=1;
int value=1;
String res = "";
while (i <= 10){
  res = value + ((i>1)?",":"") + res;
  value = value * i;
  i++;
}
System.out.print(res);

这将给出从9到1的所有阶乘:

int i=1;
int value=1;
String res = "";
while (i <= 9){
  value = value * i;
  res = value + ((i>1)?",":"") + res;
  i++;
}
System.out.print(res);
也许这是作弊,因为我是从1开始按升序计算阶乘的!到9点!,但是为了得到所需的结果,我颠倒了输出的顺序

编辑:

如果你也想要0!要打印,一个小的变化可以做到:

int i=1;
int value=1;
String res = "";
while (i <= 10){
  res = value + ((i>1)?",":"") + res;
  value = value * i;
  i++;
}
System.out.print(res);

首先,第二个循环不起作用的原因是for中的条件错误。中间的条件是使循环继续,而不是停止。你刚才说的是从9开始,在数字小于0时工作。当然,你的数字一开始就大于零

其次,我认为使用for循环有点作弊,因为for循环只是while循环的一个特例

现在来谈谈阶乘本身的问题。你知道一个阶乘n!定义为n-1*n

计算一个特定阶乘的基本循环是:

int n = 5;
int factorial = 1;

while ( n > 0 ) {
    factorial *= n;
    n--;
}

System.out.println( "Factorial is: " + factorial );
这将得到五的阶乘。但它并不完全基于我们所说的公式。还有另一种计算方法,从1开始:

int n = 5;
int factorial = 1;
int count = 1;
while ( count <= n ) {
   factorial *= count;
   count++;
}
System.out.println( "Factorial is " + factorial );

请注意,我对它进行了更多的修改,以便它可以使用零。零的阶乘是一种特殊情况,所以我们不应该乘以零——这将使所有的阶乘都是错误的。因此,我将循环更改为仅在我将count增加到1之后才进行乘法。但这也意味着您必须从循环中打印出最终的阶乘。

首先,第二个循环不起作用的原因是for中的条件错误。中间的条件是使循环继续,而不是停止。你刚才说的是从9开始,在数字小于0时工作。当然,你的数字一开始就大于零

其次,我认为使用for循环有点作弊,因为for循环只是while循环的一个特例

现在来谈谈阶乘本身的问题。你知道一个阶乘n!定义为n-1*n

计算一个特定阶乘的基本循环是:

int n = 5;
int factorial = 1;

while ( n > 0 ) {
    factorial *= n;
    n--;
}

System.out.println( "Factorial is: " + factorial );
这将得到五的阶乘。但它并不完全基于我们所说的公式。还有另一种计算方法,从1开始:

int n = 5;
int factorial = 1;
int count = 1;
while ( count <= n ) {
   factorial *= count;
   count++;
}
System.out.println( "Factorial is " + factorial );

请注意,我对它进行了更多的修改,以便它可以使用零。零的阶乘是一种特殊情况,所以我们不应该乘以零——这将使所有的阶乘都是错误的。因此,我将循环更改为仅在我将count增加到1之后才进行乘法。但这也意味着您必须从循环中打印出最终的阶乘。

您可以将for循环与while循环一起使用吗?for count=9;计数<0;计数-表示:从计数为9开始;循环,只要计数小于0;每次迭代时,递减计数为1。可见,count<0应该是count>=0。计算阶乘时不需要两个循环。再考虑一下您的算法。在for条件中更改为count>=0您必须将for循环的条件更改为>=0您可以将for循环与while循环一起使用吗?for count=9;计数<0;计数-表示:从计数为9开始;循环,只要计数小于0;每次迭代时,递减计数为1。可见,count<0应该是count>=0。计算阶乘时不需要两个循环。再考虑一下您的算法。在for cond中更改为count>=0
如果您必须将For循环的条件更改为>=0,我相信这个想法是通过一个while循环获得从9到0的所有阶乘。你只计算了一个阶乘。对不起,我没有注意到。在这种情况下,结果也应该显示0的阶乘,我刚刚更新了代码。如果顺序很重要,只需将结果最初存储在一个数组中并以相反的方式打印就足够了。我相信这个想法是通过一个while循环获得从9到0的所有阶乘。你只计算了一个阶乘。对不起,我没有注意到。在这种情况下,结果也应该显示0的阶乘,我刚刚更新了我的代码。如果顺序很重要,只需将结果最初存储在数组中并以相反的方式打印就足够了。谢谢,到目前为止,您是否有机会解释这一行?res=值+i>1?,:+res@DeFa1T中间的奇怪部分仅仅是为了避免在输出结束时增加一个额外的值,只要i>1。这一行在先前计算的阶乘之前添加下一个阶乘,这样输出将从9开始反转!以1!结尾!。谢谢,你能解释一下这句话吗?res=值+i>1?,:+res@DeFa1T中间的奇怪部分仅仅是为了避免在输出结束时增加一个额外的值,只要i>1。这一行在先前计算的阶乘之前添加下一个阶乘,这样输出将从9开始反转!以1!结尾!。