乘法数字根-扫描仪中的新输入

时间:2019-01-08 17:33:03

标签: input java.util.scanner root digital

我想从扫描仪获取条目的乘法数字根。当您输入一个负数或大于100万的数字时,尽管获得了新的输入,但我还是遇到了一些问题。

在这些情况下,如何再次获得输入并尝试再次计算?

import java.util.Scanner;
public static void main(String[] args) {
    // TODO Auto-generated method stub
    Scanner sc = new Scanner(System.in);
    System.out.println("Calculate multiplicative digital root");

    int x = sc.nextInt();
    int mdc = 1; //multiplicative digital root = mdc
    if (x >= 0 && x <= 1000000) {
        while (x != 0) {
            mdc = mdc * (x % 10);
            x = x /10;
        }
    System.out.println(mdc);
    }
    else {
        System.out.println("Wrong number range or negative");
    }
}

1 个答案:

答案 0 :(得分:0)

由于您要再次扫描输入并再次重新启动逻辑,因此可以将此业务逻辑提取到新方法中,例如CalculateMdc()

static void CalculateMdc(){
    Scanner sc = new Scanner(System.in);
    System.out.println("Enter Number in range: ");
    int x = sc.nextInt();
    int mdc = 1; //multiplicative digital root = mdc
    if (x >= 0 && x <= 1000000) {
        while (x != 0) {
            mdc = mdc * (x % 10);
            x = x /10;
        }
    System.out.println(mdc);
    }
    else {
        System.out.println("Wrong number range or negative");
        CalculateMdc(); // Recursive Call
    }
}

这里重要的是您在else块中进行递归调用。 由于您将再次获得输入并尝试再次CalculateMdc,因此可以递归调用相同的方法。

然后您的主要方法将非常简单:

public static void main(String[] args) {
    // TODO Auto-generated method stub
    System.out.println("Calculate multiplicative digital root");
    CalculateMdc();
}

注意:由于您正在使用sc.nextInt()获取整数,因此假设输入为整数,并且未验证错误的输入。要验证错误的输入,还需要做更多的工作。