【发布时间】:2013-05-27 22:08:44
【问题描述】:
我正在尝试在 java 中将 int 123 转换为 String "CBA"
我知道我在递归中有一些误解
经过多次 println 语句,我知道在某一点上
ss 将成为“CBA”
但它会返回“CB”和“C”
我知道递归会这样工作,但我不知道如何解决它
谁能帮我写代码,谢谢!
public String recur ( int x, String ss )
{
if ( x >= 1 && x < 10 )
ss = ss + "A";
if ( x >= 10 && x < 100 )
{
ss = ss + "B";
recur( x % 10, ss);
}
if ( x >= 100 && x < 1000 )
{
ss = ss + "C";
recur( x % 100, ss);
}
return ss;
【问题讨论】:
-
尽管 Java 允许这样做,但重用方法参数值是不好的做法。提示:使用
StringBuilder。 -
请注意,虽然@fge 的评论是正确的,但它无助于解决 OP 的问题。 “提示”也是非常值得怀疑的。充其量只是边际微优化。如果 OP 关心性能,那么正确的优化将是迭代地实现它......
-
@StephenC 我不会将保证数据安全的东西称为“微优化”
-
@fge - 使用 StringBuilder 如何“保证数据安全”?无论如何,您所说的“数据安全”是什么?这里的问题是代码的正确性、健壮性和可读性,而不是“数据安全”。
-
@StephenC 很简单:对 stringbuilder 的任何优化都会影响 stringbuilder 本身;因此,您可以递归并将其作为参数传递,然后将
sb.toString()作为参数返回。这与不可变的String不同。