提问人:RileyGT 提问时间:8/31/2023 最后编辑:M. YousfiRileyGT 更新时间:9/2/2023 访问量:55
如何处理斐波那契数列的无效输入
How to handle invalid input for Fibonacci Sequence
问:
我正在尝试创建一个斐波那契数列生成器,其中所有无效的输入情况在要求用户重试之前都有响应。
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("The Fibonacci Sequence is the series of whole positive numbers where the next number is found by adding up the two numbers before it. \nGive it a try!");
double number = 0; //
boolean error;
do {
try {
error = false;
System.out.println("Enter a number to use as an upper limit. The Fibonacci Sequence will be generated up to that number.");
number = in.nextDouble();
if (number % 1 != 0 || number < 0) {
System.err.println("The Fibonacci Sequence only works with positive whole numbers, please enter a positive integer.");
} else {
System.out.println("The Fibonacci Sequence is: ");
int i = 0;
int f0 = 0;
int f1 = 1;
int fn;
double value = 0; // changed this to double which is redundant since value is not used
do {
fn = f0 + f1;
System.out.print(f0 + " ");
f0 = f1;
f1 = fn;
value = number - f0;
i++;
} while (f0 <= number);
}
} catch (Exception e) {
System.out.println("The Fibonacci Sequence only works with positive whole numbers, please enter a positive integer.");
error = true;
}
} while (number < 0 || number % 1 != 0 || error) ;
}
但是,当我将 try/catch 与我的 do-while 循环一起使用时,我会在 catch 和输入提示中得到消息的无限循环。
斐波那契数列仅适用于正整数,请输入正整数。 输入要用作上限的数字。斐波那契数列将生成到该数字........
我在 Java 方面还不是超级高级,所以现在我想找到使用这个逻辑的解决方案,只是找到一种方法来修复我的代码。谢谢!
答:
0赞
WJS
8/31/2023
#1
它适用于任何情况,除非您输入非数字。它循环是因为输入缓冲区中仍然有一个值,因此错误不断重复。因此,您需要删除 catch 块中的该输入,如下所示:
catch (Exception e) {
System.out.println("The Fibonacci Sequence only works with positive whole numbers, please enter a positive integer.");
error = true;
in.nextLine(); // <-- Remove problem input
}
顺便说一句,既然你只想要积极,你为什么要提示双打?您可能需要执行以下操作:ints
int number;
// then later
number = in.nextInt();
这是对我认为您可能想要的略有修改。我还提供了一个退出程序的友好方式。
Scanner in = new Scanner(System.in);
System.out.println(
"The Fibonacci Sequence is the series of whole positive numbers where the next number is found by adding up the two numbers before it. \nGive it a try!");
int number = 0; //
boolean error;
for (;;) { // loop forever (or until user enters 'quit`)
System.out.println(
"Enter a number to use as an upper limit. The Fibonacci Sequence will be generated up to that number.");
try {
number = in.nextInt();
} catch (Exception e) {
// input problem, see if user wants to quit
String value = in.next();
if (value.equalsIgnoreCase("quit")) {
System.out.println("Bye!");
return;
}
// some other errored input so force error message
number = -1;
}
if (number < 0) {
System.err.println(
"The Fibonacci Sequence only works with positive whole numbers, please enter a positive integer.");
} else {
System.out.println("The Fibonacci Sequence is: ");
int i = 0;
int f0 = 0;
int f1 = 1;
int fn;
double value = 0; // changed this to double which is redundant
// since value is not used
do {
fn = f0 + f1;
System.out.print(f0 + " ");
f0 = f1;
f1 = fn;
value = number - f0;
i++;
} while (f0 <= number);
System.out.println();
}
}
评论
1赞
RileyGT
9/1/2023
哇,我有很多东西要学,谢谢!
0赞
WJS
9/1/2023
@RilyeGT 我也是,:)
评论