我正在尝试将int 123转换为String" CBA"在java中
我知道我在递归中有一些被误解的东西
在许多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;
答案 0 :(得分:1)
您忽略了recur的返回值,因此只有在输出处才能看到第一级递归。
所以你可以这样做来考虑返回值。 (只需将recur的输出分配给ss)
ss = recur( x % 10, ss);
和另一个电话。
ss = recur( x % 100, ss);
答案 1 :(得分:0)
你的方法不正确,对于初学者来说,你甚至不需要传递一个字符串作为参数 - 只需在返回值中构建字符串。此外,从整数转换为字符串的逻辑过于复杂,如果整数按照确切的顺序包含数字1, 2, 3
,则仅有效!这是一种更简单,有效的方法,可以依次处理每个字符,适用于任何数字的整数:
public String recur(int x) {
if (x <= 0)
return "";
return (char) (x % 10 + 'A' - 1) + recur(x / 10);
}
说明:
x % 10
从整数中获取当前数字,并通过添加'A'
并减去1
10
答案 2 :(得分:0)
(本答案主要针对花生画廊......)
这是我对问题的“最佳”递归解决方案的看法:
public String recur ( int x )
{
if ( x >= 1 && x < 10 ) {
return "A";
} else if ( x >= 10 && x < 100 ) {
return "B" + recur( x );
} else if ( x >= 100 && x < 1000 ) {
return "C" + recur( x );
} else {
throw new IllegalArgumentException();
}
}
System.err.println(recur(123));
或更普遍:
public String recur ( int x)
return recur0( x, 0 );
}
public String recur0 ( int x, int i )
{
if ( x <= 0 ) {
return "";
else {
return recur0( x % 10, i + 1 ) + ((char) ('A' + i));
}
}
System.err.println(recur(123));
如您所见,不需要StringBuilder。最好的情况是,StringBuilder是一种微优化。它不会使代码更安全,也更可读。为了说明,这是使用StringBuilder重做的第一个版本
public void recur ( int x, StringBuilder sb )
{
if ( x >= 1 && x < 10 ) {
sb.append("A");
} else if ( x >= 10 && x < 100 ) {
sb.append("B");
recur( x, sb );
} else if ( x >= 100 && x < 1000 ) {
sb.append("C");
recur( x, sb );
}
}
StringBuilder sb = new StringBuilder();
recur(123, sb);
System.err.println(sb.toString());
但最初提出的问题最简单的解决方案是:
public String nonRecur(int x) {
if ( x >= 1 && x < 10 ) {
return "A";
} else if ( x >= 10 && x < 100 ) {
return "BA";
} else if ( x >= 100 && x < 1000 ) {
return "CBA";
} else {
throw new IllegalArgumentException();
}
}
System.err.println(nonRecur(123));
请注意,问题陈述的方式存在相当大的模糊性,@ÓscarLópez的解决方案基于对问题的不同的解释而不是我的解释。他将数字的数字映射到字母,而不是使用字母来表示幅度。
事实上,OP的实际问题既不是这些解释,我认为任何答案都不会真正帮助他......即使他们确实回答了他的问题。 / p>