gpt4 book ai didi

java - 为什么我的字符串在 try/catch block 之后更改为旧的输入形式 Scanner (编辑 : calling method again)

转载 作者:行者123 更新时间:2023-12-01 10:17:43 25 4
gpt4 key购买 nike

我正在使用 Eclipse 进行 Java 编程。我对处理异常还很陌生,所以可能有一些重要的事情我没有看到。

这是我的代码

public static String getString(String data, int dataType){
String inString;
System.out.print("Type the " + data + ": ");
inString = in.nextLine();
System.out.println("1- " + inString);
try
{
if (dataType == TYPE_INT){
int i = Integer.parseInt(inString.trim());
} else if (dataType == TYPE_DOUBLE)
{
double j = Double.parseDouble(inString.trim());
}
return inString;

}
catch (NumberFormatException nfe)
{
System.out.println("NumberFormatException: " + nfe.getMessage());
System.out.println("Please enter the correct information.");
getString(data, dataType);
}
System.out.println("return " + inString);
return inString;
}

如果我希望用户“输入名称:”,则字符串数据正是我想要的数据,例如“名称”

控制台示例:

输入此人的信息。
输入姓名:弗兰克
1-弗兰克
输入出生年份 yyyy:我不知道为什么这不起作用
1-我不知道为什么这不起作用
NumberFormatException:对于输入字符串:“我不知道为什么这不起作用”
请输入正确的信息。
输入出生年份 yyyy:1990
1-1990年
返回 idk 为什么这不起作用
线程“main”中的异常 java.lang.NumberFormatException:对于输入字符串:“我不知道为什么这不起作用”
在 java.lang.NumberFormatException.forInputString(来源未知)
在 java.lang.Integer.parseInt(来源未知)
在 java.lang.Integer.parseInt(来源未知)
在 fiu.cop3337_5916837.assigment2_1.Main.main(Main.java:24)

我得到的最后一个异常是因为:Integer.parseInt(getString("出生年份 yyyy", TYPE_INT))

这就是我调用该方法的方式。

我只是不明白为什么当 inString 已经等于 1990 时我得到“return idk Why this do not work”。谢谢!

最佳答案

当您从 catch 内部调用 getString(data, dataType); 时,该方法会创建一个新的本地 inString。这个新的 inString 保存着您的 1990。当getString返回时该变量被丢弃。 catch block 完成,并打印原始的 inString

顺便说一句,从 try block 内部返回通常是一个坏主意。

关于java - 为什么我的字符串在 try/catch block 之后更改为旧的输入形式 Scanner (编辑 : calling method again),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35802557/

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