坚持使用Java的递归方法?

时间:2016-02-11 06:56:03

标签: java recursion methods

我正在尝试创建一个将整数值转换为单词String的方法。这是我的代码:

arraysize

我不知道如何在此之后再次调用该方法。 一个示例运行将是1234然后将转换为一个二三四。

2 个答案:

答案 0 :(得分:2)

请注意,您不包括零,我不明白您为什么这样做:String numStr = Integer.toString(n);

您要做的是:

public static void num(int n){
    String[] numbers = {"zero","one", "two", "three", "four", "five" , "six", "seven", "eight", "nine"};
    if(n<10){
         System.out.println(numbers[n]);
         return;
    }
    else{
         num(n/10);
         System.out.println(numbers[n%10]);
    }

}

您可以使用以下方法:

public static void main(String args[]){
    num(1234);
}

答案 1 :(得分:1)

正如MartínMuñozdelRío指出的那样,没有将整数转换为String,因为这只会创建一串数字(即1234变成“1234”)。 if语句检查整数是否等于0也没有用,因为这不会解决其他单个数字的整数。如果n等于3或8,程序将继续进行下一步。

将每个数字的字符串表示形式存储在数组中是一个很好的第一步,但您还需要创建一个String,它将存储原始整数的完整字符串表示形式。我已创建并初始化String digitString来执行此操作。

    public static void num (int n) {

            String[] numbers = {"zero", "one", "two", "three", "four",      "five", "six", "seven", "eight", "nine"};

            String digitString = "";

您的原始if语句有正确的想法,但它只检查单个数字整数是否为零。要解决此问题,请调整if语句以检查n是否小于10.由于递归方法需要删除已经计算过的数字,因此此调整还将确保程序在只有一位数时知道该怎么做左

    public static void num (int n) {

            String[] numbers = {"zero", "one", "two", "three", "four",      "five", "six", "seven", "eight", "nine"};

            String digitString = "";

            if (n < 10) {
                digitString += numbers[n] + " ";
            } else {
                int digit = n%10;
                digitString = numbers[digit] + " " + digitString;
                num(n/10);
            }

            System.out.print(digitString);
    }

如果n大于或等于10,则语句的else块将通过查找n / 10的余数来隔离整数的最后一位。数字被隔离后,您可以使用数字作为数字中的索引来检索字符串。将数字的字符串表示形式添加到digitString,但不要使用+ =或字符串将以相反的顺序保存数字。要在不评估相同数字的情况下再次调用循环,请将n / 10插入方法中。

此处使用System.out.print()而不是System.out.println(),以便每个字符串数字将打印在同一行。

您可以像上面显示的MartínMuñozdelRío一样调用主要方法:

    public static void main(String[] args) {
            num(3456);
    }

希望这有用!