【问题标题】:Int variables NOT being updated in a recurring input?Int 变量没有在重复输入中更新?
【发布时间】:2020-06-29 20:48:17
【问题描述】:
Link to specific problem: https://hyperskill.org/projects/48/stages/258/implement#comment

public class Main {    

    private static Scanner input = new Scanner(System.in);


    public static void edit(char[][] matrix){
        System.out.print("Enter the coordinates: ");
        String coords = input.nextLine();

        String coords2 = coords.replaceAll("\\s", "");

        int coordsNum = Integer.parseInt(coords2);
        int compare = coordsNum % 10;
        int compare2 = coordsNum / 10;

        for(int i = 0; i < coords2.length(); i++){

            if(compare < 1 || compare > 3 || compare2 < 1 || compare2 > 3){
                //Code
                edit(matrix);
            }
            //Check if input are numbers
            if(!Character.isDigit(coords2.charAt(i))){
                //Code
                edit(matrix);
            }
        }

}

当我发生递归并键入一个新字符串时,变量 coordsNum、compare 和 compare2 不会从我的输入中更新。每当我的输入低于 0 或高于 3 时,它们都保持不变。我尝试将变量放入一个输入行,但这不起作用。逻辑也没有错。

Ex) 输入:4 1 -> Recur -> 1 3 -> 打印出值,打印 4,1 而不是 1,3

【问题讨论】:

  • @GiorgiTsiklauri 是的!它应该接受一个新的输入,并用这个新的输入更新变量。
  • 请澄清您的问题。不清楚。
  • @GiorgiTsiklauri 哪一部分看起来令人困惑?每次进行递归调用时,变量 coordsNum、compare 和 compare2 都应该更新为该输入,但是当我将它们打印出来时,它们并不是最新的输入。
  • 您输入的数据是什么?你的意思是 - 他们应该被更新?在这段代码中,您应该为每个递归调用提供一个输入。
  • 提供您想要提供的特定输入。

标签: java recursion methods numbers logic


【解决方案1】:

这段代码很奇怪。

让我们看看会发生什么:

  1. edit#1 打印 "Enter the coordinates: "
  2. 您将"4 2" 整行读入变量coords
  3. 您通过从coords 中删除空格来创建coords2"42"
  4. 您创建 cordsnum = 42compare = 2compare2 = 4
  5. 您开始了 2 次迭代的 for 循环 (edit#1for#1)
  6. edit#1for i = 0 中检查comparecompare2 的边界,其中compare2 &gt; 3
  7. edit#2 打印 "Enter the coordinates: "
  8. 您将"2 2" 整行读入变量coords
  9. 您通过从coords 中删除空格来创建coords2"22"
  10. 您创建 cordsnum = 22compare = 2compare2 = 2
  11. 您开始了 2 次迭代的 for 循环 (edit#2for)
  12. edit#2for i = 0 中检查comparecompare2 不匹配的边界
  13. 你检查是否!Character.isDigit("22".charAt(0)),即false
  14. edit#2for i = 1 中,您再次检查comparecompare2 不匹配的边界
  15. 你检查!Character.isDigit("22".charAt(1)),即false
  16. 方法返回edit#1,这里coord2"42"coordnum=42compare = 2compare2 = 4
  17. 你检查!Character.isDigit("42".charAt(0)),这是false
  18. edit#1for i = 1 中再次检查comparecompare2 的边界,其中compare2 &gt; 3
  19. edit#3 打印 "Enter the coordinates: "
  20. ...

所以我不确定你为什么要检查 compare2 是否包含数字,因为如果它不包含 Integer.parseInt(coords2) 会抛出异常并且你永远无法检查它。还要检查compare &lt; 1 || compare &gt; 3 || compare2 &lt; 1 || compare2 &gt; 3 两次是即使您输入了正确的数据,您最终还是会进行另一轮的原因。

我想了解的是,当方法返回时,它会从被调用者那里恢复。它不关心它是否调用自己,因为它是具有自己变量的不同版本的自身。当它返回时,它会返回一个步骤并继续,就像您使用非递归调用所假设的那样。完全没有区别。

祝你挑战成功!

【讨论】:

    猜你喜欢
    • 2021-07-10
    • 2021-04-11
    • 1970-01-01
    • 1970-01-01
    • 2012-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-17
    相关资源
    最近更新 更多