gpt4 book ai didi

java - 在第一次迭代时返回正确,在任何其他迭代中返回不正确,java

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

我还在学习java,所以我可能会在这里错过一些东西,但它看起来不像我那样,而且它做了一些我无法确定的时髦的事情。我提示用户输入算术运算符或“q”来退出。当我运行 prog 来测试它时,如果我第一次输入有效输入,它会正常工作,但是如果我尝试进行 1 个或多个无效输入,则返回始终默认为检查字符串中的最后一个字符,即使它停止运行并在结束之前返回。

//gets operation from user
public static String getOperation(Scanner scan) {
//valid input string to check against
String ops = "+-*/=Q";
System.out.print("Please enter an operation (+, -, /, *, = or Q to quit): ");
String op = scan.next();
//makes sure input is only 1 character
if (op.length() > 1) {
//recurses if not 1 character
getOperation(scan);
}
op = op.toUpperCase();
String check = "";
//begins substringing the check string one at a time for comparison against valid
for (int i = 0; i < ops.length(); i++) {
if (i == ops.length() - 1) {
check = ops.substring(i);
} else {
check = ops.substring(i, i + 1);
}
//exits with current check if appropriate character
if (check.equals(op)) {
return op;
}
}
//if not valid input, recurses for proper input
getOperation(scan);
return check;
}

当测试我是否第一次输入'/'时,它返回'/'。当测试我是否输入“a”、“s”、“d”、“/”时,它返回“Q”,应该是“/”

最佳答案

这不是使用递归的正确方法。让我们假设一个非常基本的无效输入:“a”、“/”。

当函数读取'a'时,它将完全执行for循环,当for循环结束时,check将等于“Q”,因为这就是 for 循环中最后一个操作将始终执行的操作。然后,它将递归:

//if not valid input, recurses for proper input
getOperation(scan);
return check;

并读取有效的输入'/'。该函数的第二级将返回“/”,但是,该结果将被丢弃,因为您没有将递归的输出分配给任何内容。然后该函数返回 check,对于所有无效输入,该值等于 'Q'(因为它是操作字符串中的最后一个值)。

因此,解决方案是返回 getOperation(scan);,而不是调用函数然后丢弃输出。

其他一些注意事项:

  • 使用 ops.charAt(i) 而不是 ops.substring(),因为您一次只对单个字符感兴趣。这进一步意味着您可以:
  • 使用原语 == 进行比较,这样可以节省函数调用(这需要 opchar,但您应该无论如何都要这样做,因为同样,您一次只对一个角色感兴趣。或者,一个更好的主意:
  • 使用 ops.contains(op) 函数,而不是您自己的 for 循环;如果返回true,则直接返回op,否则就知道输入无效

关于java - 在第一次迭代时返回正确,在任何其他迭代中返回不正确,java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57315655/

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