gpt4 book ai didi

带返回值的 Java 错误/异常处理

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

所以我和我的 friend 正在用 Java 编程 Blackjack,我们想测试我们的输入字段是否正确输入(例如仅输入数字)。所以我们坐在他的电脑前,他写了这个解决方案:

    public static boolean testeTextFieldInt(JTextField textField,  int geld) {
if (!textField.getText().isEmpty()) {
try {
if(Integer.parseInt(textField.getText())>0 && Integer.parseInt(textField.getText())<geld ) {
return true;
}
} catch (NumberFormatException e) {
return false;
}
}
return false;
}

现在我不同意这个解决方案,因为你的代码不应该依赖于错误,还是我弄错了?所以我坐下来写了这个:

    public static boolean checkInput(JTextField textField, int spielerGeld, String eingabe) {

boolean matched = false;

switch (eingabe) {

case "num":
if (!textField.getText().isEmpty() && textField.getText().matches("^[0-9]*$")) {

int geldinput = Integer.parseInt(textField.getText());

if (geldinput > 0 && geldinput < spielerGeld) {
matched = true;
}
}
break;

case "string":
if (!textField.getText().isEmpty() && textField.getText().matches("^[a-zA-Z]*$")) {
matched = true;
}
break;

default:
break;
}
return matched;
}

请记住,我们还没有任何需要检查的文本字段,但我只是实现它来了解如何在一种方法中进行多次检查。

所以现在我的问题是,什么代码“更好”?我们/我可以做得更好吗?

提前致谢!

编辑1:正如一些人已经提到的,你说我的方法不是在单一责任原则之后建立的。但是,如果分成“checkInputIsnumber”和“checkInputIsString”,第一个解决方案(我的 friend )仍然是“更好”的解决方案吗?

编辑2:更好的定义是,该方法应该具有低圈复杂度、易于阅读并且易于长期维护。

最佳答案

第一种方法比第二种方法好得多。

  1. 单一职责:您应该避免创建执行多项任务的方法。
  2. 开闭原则:您的“验证”是不可扩展的。尝试创建一个 Validator 接口(interface),然后为每个验证类型创建一个实现。
  3. Switch 语句会增加圈复杂度并使测试变得更加困难。

另外,不要到处使用 textField.getText(),它很可能在调用之间发生变化。将其分配给局部变量,或者更好地使用 String 作为参数,而不是 JText。正如 Fildor 指出的那样,您正确地避免使用异常进行流量控制,并且拥有单个返回点确实更好。话虽如此,对于简单的情况,只需解析/检查并返回,这是可以接受的。

关于带返回值的 Java 错误/异常处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53185798/

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