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.
}