通过引用问题 - Java

时间:2015-05-27 10:44:28

标签: java pass-by-reference pass-by-value

在方法compute(ee, temp1, s1, k)中从方法smaller()调用正在传递的参数值与接收的参数值不同,有人可以帮我解决这个问题吗?

*这是我的问题陈述 - 从输入数字中删除k个数字后得到最少的数字。例如,如果输入的数字是24635,则删除3位数后最小数字是23。

我期待最终输出为23但是无限循环。

public class Delete3 {


    public static void main(String[] args) {
        int k = 3;
        int num = 24635;
        StringBuffer num1 =new StringBuffer(Integer.toString(num));
        int temp = 0;
        StringBuffer s = new StringBuffer(num1);
        temp = Integer.parseInt(s.deleteCharAt(0).toString());
        temp = compute(num1, temp, s, k);
        System.out.println(temp);
    }

    static int compute(StringBuffer num2, int temp, StringBuffer s, int k) {
        while (Integer.toString(temp).length() >= k) {
            for (int i = 0; i < num2.length(); i++) {
                StringBuffer s1 = new StringBuffer(num2);
                String a = s1.deleteCharAt(i).toString();
                int temp1 = Integer.parseInt(a);
                if (temp > temp1) {
                    temp = Integer.parseInt(a);
                }
            }
            StringBuffer ee = new StringBuffer(Integer.toString(temp));
            if (ee.length() >= k) {
                smaller(temp, k);
            }
        }
        return temp;
    }

    static void smaller(int temp, int k) {
        StringBuffer ee = new StringBuffer(Integer.toString(temp));
        StringBuffer s1 = new StringBuffer(ee);
        StringBuffer s2 = new StringBuffer(ee);
        Integer temp1 = Integer.parseInt(s2.deleteCharAt(0).toString());
        compute(ee, temp1, s1, k);
    }
}

2 个答案:

答案 0 :(得分:1)

您获得的无限循环是因为您从smaller()内部调用了compute()而在compute()内调用了smaller()。如果这是故意完成的,那么还要添加一个终止条件,这将阻止它无限循环。

答案 1 :(得分:0)

您可以使用以下简单代码:

UITextView