我想从扫描仪获取条目的乘法数字根。当您输入一个负数或大于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");
}
}
答案 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()
获取整数,因此假设输入为整数,并且未验证错误的输入。要验证错误的输入,还需要做更多的工作。