Java 如何进行str与int递归,一次一个字符?

Java 如何进行str与int递归,一次一个字符?,java,recursion,comparison,Java,Recursion,Comparison,所以我一直在讨论这个问题,这里有一个方法equalNumbers(String str,int num),它确定str中的字符是否表示与num相同的数字。空字符串等于零 equalNumbers("123", 123) true equalNumbers("9", 999) false 等等 这个方法应该是递归的,所以没有循环,也没有使用像Integer.parseInt、Integer.valueOf、和Integer.decode()这样的东西。允许

所以我一直在讨论这个问题,这里有一个方法
equalNumbers(String str,int num)
,它确定str中的字符是否表示与num相同的数字。空字符串等于零

equalNumbers("123", 123) true
equalNumbers("9", 999) false
等等

这个方法应该是递归的,所以没有循环,也没有使用像
Integer.parseInt
Integer.valueOf
、和
Integer.decode()这样的东西。允许使用助手函数

它鼓励使用
charAt(index)
Character.gerNumericValue(ch)

===

基于它鼓励我做的事情,我想它希望我逐个字符地遍历字符串,将该字符转换为整数,并一次将其与整数中的一个数字进行比较。似乎我唯一可以做的转换是从char到int。所以我的问题是:

  • 我应该用字符构建一个字符串,然后将整个字符串转换成整数吗?(我认为这是不允许的)
  • 是否可以在整数中逐个索引,而不将其转换为字符串

  • 我会展示我自己的代码,但我对这些数据类型的工作原理有一个概念上的空白。

    通常公共函数调用带有额外参数的私有递归函数。 对于使用
    get_int\u at_index
    的代码,需要传递额外的递归函数
    i

    在您的情况下,这是不需要的,但是您需要使用
    String
    (使用
    charAt
    检查一小部分)和
    int
    。现在我怀疑
    String.valueOf(int)
    不是故意的,而是通过10的模数(
    %10
    )检查数字的一小部分,一个数字

    取模10将首先给出最右边的数字,因此:

    int num

    • int-digit=num%10;//我们处理的小部分
    • num=num/10;//其余部分
    String str

    • charch=str.charAt(str.length()-1);//微小部件
    • str=str.substring(0,str.length()-1);//其余部分
    所以


    “概念上的障碍…”,请你提出一个明确而中肯的问题,并向我们展示你自己解决这个问题的尝试。因此,与其采用这种设计/讨论方法,为什么不采纳您的想法,并从中开始编写一些代码,看看哪些有效,哪些无效。您使用
    String.valueOf
    可能会违背本练习的目的,并且可能不被允许使用(幸运的是,这也是不必要的).让我给你一个提示:不要使用for循环
    equalNumbers(“,0)
    应该为true(请参见问题:它表示“空字符串等于零”)。但是,对于
    equalNumbers(“,1”)
    ,您的第二个代码段也返回true,这是错误的。@k314159您是对的,删除了不允许使用“”的版本。是的,但您仍然留下了另一个问题:
    assertFalse(equalNumbers(“,1))
    失败。@k314159更正了不小心的复制错误,我感到羞耻。空字符串要求num==0,实际上我不打算给出完整的编码答案,只是在途中帮助OP。
    public static boolean equalNumbers(String str, int num) {
        if (str.isEmpty()) { // End recursion.
            return num == 0;
        }
        char ch = str.charAt(str.length() - 1);
        int digit = num % 10;
        if (Character.getNumericValue(ch) != digit) {
            return false;
        }
        str = str.substring(0, str.length() - 1);
        num = num / 10;
        return equalNumbers(str, num); // Recurse.
    }