Java递归示例

时间:2014-12-06 20:16:19

标签: java recursion

我正在处理用户输入数字的类的问题,如果是1000或更高,则必须添加逗号。因此,如果用户输入12300,则输出将为12,300。我能够弄清楚如何为低于100万的数字做这件事,但是当我输入像1234567这样的数字时,它根本不打印任何东西。以下是该方法的代码:

public static String commas(long l) {
    String s = "";
    String pt1;
    String pt2;
    long pt1Number;
    long pt2Number;

    if (l < 1) {
            return String.valueOf(l);

    } else {

        pt1Number = l / 1000;
        pt2Number = l % 1000;

        if (pt1Number < 1000) {
            pt1 = String.valueOf(pt1Number);
            pt2 = String.valueOf(pt2Number);
            s = pt1 + "," + pt2;

        } else {
            commas(pt1Number);

        }

    }

    return s;

}

}

有人看到我的代码可能出错吗?

3 个答案:

答案 0 :(得分:1)

你的意思是这个吗?

public static String commas(long input) {
        if (input < 1000) {
            return String.valueOf(input);
        } else {
            long pt1Number = input / 1000;
            long pt2Number = input % 1000;
            return commas(pt1Number) + ","
                   + (pt2Number==0l?"000":String.valueOf(pt2Number));
            }

    }

您的代码中存在一些问题:

  • 错误使用递归,你已经意识到
  • 没有检查案例,如果%1000==0,你应该联合000,例如。 input=2000
  • 避免使用l作为参数名称以提高可读性,看起来与1类似

答案 1 :(得分:0)

else(当pt1Number是&gt; = 1000时)时,您对commas(pt1Number)的结果一无所知。你调用函数,完全忽略它的结果。然后,您返回s,它仍为空。

也许你的意思......

else {
  s = commas(pt1Number);
}

...而不是:

else {
  commas(pt1Number);
}

答案 2 :(得分:0)

您的程序不适用于至少次要案件 即 11输出是0,11 1000输出是1,0

请相应更改您的逻辑。

@Kent 1010为此你的输出是1,10

按照我的说法,你的代码应该修改如下

public class Comma {
public static String commas(long l) {
    String s = "";
    long pt1Number;long pt2Number;
    if (l < 1000) {
            return String.valueOf(l);
    } else {
        pt1Number = l / 1000;
        pt2Number = l % 1000;
        if (pt1Number < 1000) {
            if (pt2Number == 0) {
                s=pt1Number+","+"000";
            }else if(pt2Number>0 &&pt2Number<10)
            {
                s=pt1Number+","+"00"+pt2Number;
            }
            else if(pt2Number>9 &&pt2Number<100)
            {
                s=pt1Number+","+"0"+pt2Number;
            }
        } else {

            if (pt2Number == 0) {
                s=commas(pt1Number)+","+"000";
            }else if(pt2Number>0 &&pt2Number<10)
            {
                s=commas(pt1Number)+","+"00"+pt2Number;
            }
            else if(pt2Number>9 &&pt2Number<100)
            {
                s=commas(pt1Number)+","+"0"+pt2Number;
            }

        }
        return s;
    }
}
public static void main(String[] args) {
    System.out.println(commas(1000009));
}

}