【问题标题】:Factorial Calculator阶乘计算器
【发布时间】:2022-01-17 00:32:59
【问题描述】:

如何让程序执行新的或重复的操作或要求用户再次输入一个数字并知道它的阶乘。

import java.util.Scanner;

public class Loops {

    public static void main(String[] args) 
    {
        Scanner input = new Scanner(System.in);

        int num, num2 = 1, x, i;

        System.out.println("-------------Factorial Calculator-------------");
        System.out.print("Enter a positive integer: ");
        num = input.nextInt();

        if (num > 0) {
            System.out.print(num + "! = ");
            for (i = 1; i <= num; i++) {
                if(i < num){
                    System.out.print(i + " x ");
                    num2 = num2 * i;
                }
                if(i == num){
                    System.out.print(i);
                    num2 = num2 * i;
                    System.out.println("\nThe factorial of " + num + " is " + num2);
                    System.out.println();
                }
            }
        }else if (num < 0) {
            System.out.println("Please input a valid integer. Program stopped.");
        }
    }
}

【问题讨论】:

标签: java loops factorial


【解决方案1】:

当用户不输入正数时使用 while 循环:

System.out.print("Enter a positive integer: ");
num = input.nextInt();
while(num<0) {
    System.out.println("Please input a valid integer. Program stopped.");
    num = input.nextInt();
}

代码:

    import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);

        int num, num2 = 1, x, i;

        System.out.println("-------------Factorial Calculator-------------");
        System.out.print("Enter a positive integer: ");
        num = input.nextInt();
        input.nextLine();
        while (num < 0) {
            System.out.println("Please input a valid integer. Program stopped.");
            System.out.print("Enter a positive integer: ");
            num = input.nextInt();
        }
        if (num > 0) {
            System.out.print(num + "! = ");
            for (i = 1; i <= num; i++) {
                if (i < num) {
                    System.out.print(i + " x ");
                    num2 = num2 * i;
                }
                if (i == num) {
                    System.out.print(i);
                    num2 = num2 * i;
                    System.out.println("\nThe factorial of " + num + " is " + num2);
                    System.out.println();
                }
            }
        }
    }
}

【讨论】:

  • 不工作。我尝试将 if 语句放在 while 循环中,它可以工作,但是方程或阶乘的输出存在问题。
  • 另外我想做的是在一个完成后执行另一个操作。
  • 我修复了代码。如果你想执行更多的操作,你可以以同样的方式使用 while 循环。
【解决方案2】:

使用while 循环

import java.util.Scanner;

public class Loops {
    static boolean readInput = true;
    public static void main(String[] args) {
        while(readInput) calculateFactorial();
    }
}

private static void calculateFactorial() {
    Scanner input = new Scanner(System.in);

    int num, num2 = 1, x, i;

    System.out.println("-------------Factorial Calculator-------------");
    System.out.print("Enter a positive integer: ");
    num = input.nextInt();
    if(num <= 0) {
        readInput = false;
        return;
    }

    if (num > 0) {
        System.out.print(num + "! = ");
        for (i = 1; i <= num; i++) {
            if(i < num){
                System.out.print(i + " x ");
                num2 = num2 * i;
            }
            if(i == num){
                System.out.print(i);
                num2 = num2 * i;
                System.out.println("\nThe factorial of " + num + " is " + num2);
                System.out.println();
            }
        }
    }else if (num < 0) {
        System.out.println("Please input a valid integer. Program stopped.");
    }
}

【讨论】:

  • 不将其设为私有静态就不可能吗?我实际上还不熟悉私有静态。
  • 如果你想从main 方法调用calculateFactorial,它必须是静态的,因为如果不使用类类型的对象就不能从静态方法调用非静态方法,我更新了我的仅当用户输入有效时才计算阶乘的答案
  • @FrancisPutnam 你试过这个解决方案吗?
  • 嗯,它比我现在所知道的要先进一点。所以我不知道该怎么解释。但感谢您的努力。我很感激。
  • @FrancisPutnam 你可以通过投票来欣赏:)
【解决方案3】:

将计算阶乘的代码放在一个单独的方法中,并在 main() 的循环中调用它。

import java.util.Scanner;

public class Loops {

    public static void printFactorial(int num) {
        int i = 0;
        int num2 = 0;
        if (num > 0) {
            System.out.print(num + "! = ");
            for (i = 1; i <= num; i++) {
                if(i < num){
                    System.out.print(i + " x ");
                    num2 = num2 * i;
                }
                if(i == num){
                    System.out.print(i);
                    num2 = num2 * i;
                    System.out.println("\nThe factorial of " + num + " is " + num2);
                    System.out.println();
                }
            }
        }else if (num < 0) {
            System.out.println("Please input a valid integer. Program stopped.");
            System.exit(0);
        }

    }
    public static void main(String[] args)
    {
        Scanner input = new Scanner(System.in);
        int num = 0;
        System.out.println("-------------Factorial Calculator-------------");
        while ( true ) {
            System.out.print("Enter a positive integer: ");
            num = input.nextInt();
            printFactorial(num);
        }
    }
}

【讨论】:

  • 不工作。它说它应该在私有静态上。
  • 它应该可以正常工作。该方法不需要声明为私有静态。我在我的系统上对其进行了测试,我知道它可以工作。你确定你复制的正确吗?
  • 对此感到抱歉。是的,它有效。非常感谢。
【解决方案4】:
import java.util.Scanner;

public class Main {
public static void main(String[] args) 
{
    Scanner input = new Scanner(System.in);
    
    
    boolean runMore = true;
    
    while(runMore){
    
    

    int num, num2 = 1, x, i;

    System.out.println("-------------Factorial Calculator-------------");
    System.out.print("Enter a positive integer: ");
    num = input.nextInt();

    if (num > 0) {
        System.out.print(num + "! = ");
        for (i = 1; i <= num; i++) {
            if(i < num){
                System.out.print(i + " x ");
                num2 = num2 * i;
            }
            if(i == num){
                System.out.print(i);
                num2 = num2 * i;
                System.out.println("\nThe factorial of " + num + " is " + num2);
                System.out.println();
            }
        }
    }else if (num < 0) {
        System.out.println("Please input a valid integer. Program stopped.");
    }
    
    System.out.println("Want to contine : Enter '1' for yes and '0' for no");
    int wantToContinue = input.nextInt();
    
    if(wantToContinue==0){
        
        runMore = false;
    }
    
    }
}
}
    
    

【讨论】:

  • 代码链接 - onlinegdb.com/eyArB-7V7
  • 有点复杂。我想要发生的是就像在一个数字得到阶乘后,它会重复或立即再次要求用户输入另一个数字以知道阶乘,而不要求他们输入是或否来执行另一个操作。跨度>
【解决方案5】:
import java.util.Scanner;

public class FactorialCalculator1 {

public static void main(String[] args) {
    
        Scanner input = new Scanner(System.in);
        
        int num;
        
        System.out.println("<------Factorial Calculator------>");
        while ( true ) {
            
        System.out.print("Enter a positive integer: ");
        num = input.nextInt();
        
        boolean runMore = true;
        
        int i;
        int num2 = 1;
        
        if (num > 0) {
            System.out.print(num + "! = ");
            for (i = 1; i <= num; i++) {
                if(i < num){
                    System.out.print(i + " x ");
                    num2 = num2 * i;
                }
                if(i == num){
                    System.out.print(i);
                    num2 = num2 * i;
                    System.out.println("\nThe factorial of " + num + " is: " + num2);
                    System.out.println();
                }
            }
        }else if (num < 0) {
            System.out.println("Invalid input! Program stopped!");
            System.exit(0);
           }
        }
    }
}

【讨论】:

  • 谁能帮我弄清楚这个? 输入一个正整数:2 2! = 1 x 2 2 的阶乘是:2 输入一个正整数:3 3! = 1 x 2 x 3 3 的阶乘是:6 输入一个正整数:4 4! = 1 x 2 x 3 x 4 4 的阶乘是:24 输入一个正整数:5 5! = 1 x 2 x 3 x 4 x 5 5 的阶乘是:120 输入一个正整数:6 6! = 1 x 2 x 3 x 4 x 5 x 6 6 的阶乘是:720
猜你喜欢
  • 2012-04-22
  • 2017-04-19
  • 1970-01-01
  • 2023-03-22
  • 2015-04-19
  • 1970-01-01
  • 2013-02-19
  • 2021-11-16
  • 2016-11-29
相关资源
最近更新 更多