Java递归示例

Java递归示例,java,recursion,Java,Recursion,我正在为一个类处理一个问题,在这个类中,用户输入一个数字,如果数字大于等于1000,则必须添加逗号。因此,如果用户输入12300,输出将为12300。我能够找出如何对100万以下的数字进行打印,但当我输入1234567这样的数字时,它根本不会打印任何内容。以下是该方法的代码: public static String commas(long l) { String s = ""; String pt1; String pt2; long pt1Number;

我正在为一个类处理一个问题,在这个类中,用户输入一个数字,如果数字大于等于1000,则必须添加逗号。因此,如果用户输入12300,输出将为12300。我能够找出如何对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;

}

}
公共静态字符串逗号(长l){
字符串s=“”;
字符串pt1;
字符串pt2;
长PT1号;
长PT2数;
if(l<1){
返回字符串.valueOf(l);
}否则{
PT1编号=l/1000;
pt2Number=l%1000;
如果(PT1编号<1000){
pt1=字符串.valueOf(pt1Number);
pt2=字符串.valueOf(pt2Number);
s=pt1+“,”+pt2;
}否则{
逗号(PT1编号);
}
}
返回s;
}
}
有人看到我的代码可能有什么问题吗?

在您的
其他
中(当
pt1Number
等于1000时),您对
逗号(pt1Number)
的结果不做任何处理。调用函数,完全忽略其结果。然后,返回仍然为空的
s

也许你的意思是

else{
s=逗号(PT1编号);
}
…而不是:

else{
逗号(PT1编号);
}
你是这个意思吗

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){
返回字符串.valueOf(输入);
}否则{
长PT1编号=输入/1000;
长pt2Number=输入%1000;
返回逗号(pt1Number)+“
+(pt2Number==0l?“000”:String.valueOf(pt2Number));
}
}
代码中的一些问题:

  • 递归的用法不正确,您已经意识到
  • 未检查大小写,如果
    %1000==0
    ,则应连接
    000
    ,例如
    input=2000
  • 避免使用
    l
    作为参数名称,以提高可读性,类似于
    1

您的程序至少在轻微情况下不起作用 即 对于11,输出为0,11 对于1000,输出为1,0

请相应地改变你的逻辑

@肯特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));
}
公共类逗号{
公共静态字符串逗号(长l){
字符串s=“”;
长PT1编号;长PT2编号;
如果(l<1000){
返回字符串.valueOf(l);
}否则{
PT1编号=l/1000;
pt2Number=l%1000;
如果(PT1编号<1000){
如果(pt2Number==0){
s=pt1Number+“,”+“000”;

}否则,如果(pt2Number>0&&pt2Number9&&pt2Number0&&pt2Number9&&pt2Number9&&pt2Numbermy参数是一个长参数,但我返回一个字符串(赋值必须是这样),那么我认为你的建议行不通……我的建议是对
逗号(pt1Number)的结果进行处理;
。例如,将其存储在
s
中。输入参数与此无关。是的,谢谢您的帮助。但是“pt2Number==0l?”000的确切含义是什么:“做什么?我还没有学过。”yet@BenjaminPorter
c=条件?a:b
如果条件为真,c=a,否则c=b