Java 使用递归时如何正确添加字符串

Java 使用递归时如何正确添加字符串,java,string,recursion,Java,String,Recursion,我需要一个递归算法来解释从1到21亿之间的任何数字。我已经把程序的主要部分整理好了,但是我在把字符串输入到指定的数字时遇到了麻烦 例如,1234567打印: “壹仟贰亿叁仟肆佰伍拾陆拾七” 我理解为什么它在“百万”之前打印“千”,我只是很难找到正确的方法来处理“百”、“千”、“百万”和“十亿”的顺序。提前谢谢 static String[] numbers = { "zero", "one", "two", "three", "four", "five",

我需要一个递归算法来解释从1到21亿之间的任何数字。我已经把程序的主要部分整理好了,但是我在把字符串输入到指定的数字时遇到了麻烦

例如,1234567打印: “壹仟贰亿叁仟肆佰伍拾陆拾七”

我理解为什么它在“百万”之前打印“千”,我只是很难找到正确的方法来处理“百”、“千”、“百万”和“十亿”的顺序。提前谢谢

static String[] numbers = { "zero", "one", "two", "three", "four", "five",
                            "six", "seven", "eight", "nine", "ten", "eleven",
                            "twelve", "thirteen", "fourteen", "fifteen",
                            "sixteen", "seventeen", "eighteen", "ninteen", "twenty"};

static String[] tens = {"twenty-", "thirty-", "fourty-", "fifty-",
                        "sixty-", "seventy-", "eighty-", "ninety-"};

//static String[] hundreds = {"hundred", "thousand", "million", "billion"};

private static String say(int n) {

    if (n <= 20) {
        return numbers[n];
    } 
    else if (n < 100) { // 99
        return tens[(n / 10) - 2] + say(n % 10); // TODO: fix seventy-zero
    } 
    else if (n < 1000) { // 999 max
        return say(n / 100) + " hundred " + say(n % 100);
    } 
    else if (n < 1000000) { // 999,999 max
        return say(n / 1000) + " thousand " + say(n % 1000);
    } 
    else if (n < 1000000000) { // 999,999,999 max
        return say(n / 1000) + " million " + say(n % 1000);
    }
    else if (n <= 2147483647) { // 2,147,483,647 max integer value
        return say(n / 1000) + " billion " + say(n % 1000);
    }
    else
        return "error";
}
静态字符串[]数字={“零”、“一”、“二”、“三”、“四”、“五”,
“六”、“七”、“八”、“九”、“十”、“十一”,
“十二”,“十三”,“十四”,“十五”,
“十六”、“十七”、“十八”、“十九”、“二十”};
静态字符串[]十={“二十-”,“三十-”,“四十-”,“五十-”,
“六十-”、“七十-”、“八十-”、“九十-”};
//静态字符串[]百={“百”、“千”、“百万”、“十亿”};
私有静态字符串say(int n){

如果(n您更新了十万个位置 但是忘了更新百万和十亿的位置

else if (n < 1000000000) { // 999,999,999 max
    return say(n / 1000_000) + " million " + say(n % 1000_000);
}
else if (n <= 2147483647) { // 2,147,483,647 max integer value
    return say(n / 1000_000_000) + " billion " + say(n % 1000_000_000);
}
else如果(n<100000000){//9999999最大值
返回值(n/1000_000)+“百万”+表示值(n%1000_000);
}

else if(n首先,您应该删除所有的
else
字。如果条件为真,您可以使用return语句终止进一步的执行


第二,例如
12_345_678
将首先满足
n<1_000_000
条件,并返回
say(12_000)+“million”+say(678);
相反,正确的一个将是
say(12)+“million”+say(345_678)
。要实现它,您需要
say(n/1_000)+“million”+say(n%1_000)

作为旁注,将“零”更改为“”以使零的打印静音。谢谢!这非常有效。通过静音零,您认为只使用一个if语句来查看它是否为零会更容易吗?然后将其作为“”对于所有其他的语句?谢谢!这很有效。我也会去掉那些其他语句,这就解释了为什么它们是不必要的。