【问题标题】:Java Nested While Loops and Factorials BeginnerJava 嵌套 While 循环和阶乘初学者
【发布时间】:2018-09-06 20:04:26
【问题描述】:

我正在处理嵌套 while 循环。我从一个初始的 while 循环开始,它打印出给定数字的阶乘。代码如下。我现在正在尝试添加第二个循环,该循环将包含 10 个数字(即,如果输入了数字 4,它将打印出数字 4 到 14 的阶乘)。我知道循环应该在我已经拥有的之上开始,但我真的不知道从那里去哪里。我已经插入了我认为是第一个循环的开始。 我是编码新手,因此感谢所有帮助

现有代码:

import java.util.Scanner;

public class MyClass 
{
    public static void main(String args[]) 
    {
        Scanner myScanner = new Scanner(System.in)

        while (count <10)
        {
            int number = myScanner.nextInt();
            int fact = 1;
            int i = 1;

            while(i<=number)
            {
                fact = fact * i;
                i++;
            }
            System.out.println("Factorial of "+number+" is: "+fact);
        }
   `}
}

【问题讨论】:

  • 格式化您的代码
  • 下一个挑战,稍微优化一下:5! = 4! * 5,即在计算5!的时候不需要计算1*2*3*4,因为这已经是之前计算的结果了(4!)

标签: java while-loop nested-loops factorial


【解决方案1】:

-您需要将number = myScanner.nextInt() 移到循环之外,这样它就不会在每次迭代时都要求新的输入。

-你需要定义count(int count = 0;)

-循环直到count&lt;= 10。

-在循环结束时增加countnumber

Scanner myScanner = new Scanner(System.in);
int count = 0;
int number = myScanner.nextInt();
while (count <=10) {

     int fact = 1;
     int i = 1;

     while(i<=number) {         
         fact = fact * i;
         i++;
     }
     System.out.println("Factorial of "+number+" is: "+fact);
     number++;
     count++;
}

输出:(以 4 作为输入)

Factorial of 4 is: 24
Factorial of 5 is: 120
Factorial of 6 is: 720
Factorial of 7 is: 5040
Factorial of 8 is: 40320
Factorial of 9 is: 362880
Factorial of 10 is: 3628800
Factorial of 11 is: 39916800
Factorial of 12 is: 479001600
Factorial of 13 is: 1932053504
Factorial of 14 is: 1278945280

但是我们可以对此进行很多优化。 5!等于4! * 5. 所以知道了这一点,我们不能简单地在循环内重置ifact。如果我们输入 4,在第一次迭代之后,fact 将等于 4!,i 将等于 5。如果根本不重置它们,在下一次迭代中我们将简单地乘以 fact ( 4!)乘以 5。然后i 将变为 6,while 循环将终止。然后这将继续,直到外部 while 循环终止。

int fact = 1;
int i = 1;
while (count <=10) {       
     while(i<=number) {            
         fact = fact * i;
         i++;
     }
     System.out.println("Factorial of "+number+" is: "+fact);
     number++;
     count++;
}

使用 4 作为输入,这会将内部 while 循环中的迭代次数从 99 次减少到 14 次。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-14
    • 2011-06-25
    • 1970-01-01
    • 1970-01-01
    • 2021-02-19
    • 2013-09-26
    • 1970-01-01
    相关资源
    最近更新 更多