gpt4 book ai didi

java - java中调用自身的验证方法

转载 作者:行者123 更新时间:2023-11-30 09:31:03 25 4
gpt4 key购买 nike

我试图理解为什么方法 validateItemquantity 最终因 NumberFormatException 错误而崩溃。逻辑似乎是正确的,但有些地方不对。它假设不断要求用户重新输入,直到它获得有效输入,然后返回该有效输入。

String validateItemquantity(String itemQuantity) {
try{
Integer.parseInt(itemQuantity);

}
catch (NumberFormatException e) {
itemQuantity = JOptionPane.showInputDialog
("Invalid item quantiy, please enter a new Value");
validateItemquantity(itemQuantity);
}
return itemQuantity ;

调用方法:

 private void bnPurchaseActionPerformed(java.awt.event.ActionEvent evt) {

String itemCode, validItemquantity ;
int itemQuantity, itemPrice, itemCost, totalCost ;

validItemquantity = validateItemquantity(itemQuantityinput.getText());
itemQuantity = Integer.parseInt(validItemquantity);
itemCode = itemCodeinput.getText();
itemPrice = catalog.searchCatalog(itemCode);
itemCost = payment.calculateItemcost(itemQuantity,itemPrice);
totalCost = payment.calculateTotalcost(itemCost);

最佳答案

让它返回解析结果或在异常时调用自身,如下所示:

String validateItemQuantity(String itemQuantity) {
try {
return Integer.parseInt(itemQuantity); // returns if no exception
} catch (NumberFormatException e) {
return validateItemQuantity(JOptionPane.showInputDialog
("Invalid item quantiy, please enter a new Value"));
}
}

这个方法只会返回一个有效的响应;它会一直循环直到得到有效响应。


一些评论提到上面的代码可能会受到用户输入错误数据数百万次并炸毁堆栈的攻击。我说“让他们”,但如果你真的想确保安全,请使用 while 循环:

String validateItemQuantity(String itemQuantity) {
while (true) {
try {
return Integer.parseInt(itemQuantity); // returns if no exception
} catch (NumberFormatException e) {
itemQuantity = JOptionPane.showInputDialog(
"Invalid item quantiy, please enter a new Value"));
}
}
}

它增加了一个while循环,所以代码的复杂度略有增加,但只是多了几行代码,更加高效和安全。

关于java - java中调用自身的验证方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13036346/

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