gpt4 book ai didi

java - 递归函数的意外返回值

转载 作者:行者123 更新时间:2023-12-02 03:02:46 24 4
gpt4 key购买 nike

我写了一小段代码,目的是设置一个整数值。但是,它似乎没有返回正确的值。例如,对于以下输入,我希望它能像这样工作。

Please enter a positive integer value
-458
Please enter a positive valid integer
58
58

但是,实际输出如下。

Please enter a positive integer value
-458
Please enter a positive valid integer
58
-458

在此示例中,为什么它返回 -458 而不是 58

import java.util.InputMismatchException;
import java.util.Scanner;

public class IncorectValueReturned {
public void run() {
System.out.println("Please enter a positive integer value");
System.out.println(setInt());
}

private int setInt() {
int i = -1;
Scanner sc = new Scanner(System.in);
try {
i = sc.nextInt();
if(i < 0) {
System.out.println("Please enter a positive valid integer");
setInt();
}
} catch(InputMismatchException iME) {
System.out.println("Please enter a positive valid integer");
setInt();
}
sc.close();
return i;
}

public static void main(String[] args) {
IncorectValueReturned iVR = new IncorectValueReturned();
iVR.run();
}
}

最佳答案

您永远不会更改第一个无效的 i,您需要恢复递归调用的值

i = setInt();

当然,您不应该一遍又一遍地重新声明此扫描程序。请改用实例变量。

Scanner sc = new Scanner(System.in);
private int setInt() {
int i = -1;
try {
i = sc.nextInt();
if(i < 0) {
System.out.println("Please enter a positive valid integer");
i = setInt();
}
} catch(InputMismatchException iME) {
//Clear the scanner of this value
sc.next();
System.out.println("Please enter a positive valid integer");
i = setInt();
}
return i;
}

完成后关闭扫描仪。

小心,抛出异常的值将保留在输入中,您需要读取它,我使用 Scanner.next() 删除了错误的输入,例如大于 的值整数.MAX_VALUE

关于java - 递归函数的意外返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42202865/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com