通过引用问题-Java

Pass by Reference issue-Java

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

*这是我的问题陈述-从输入的数字中删除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);
    }
}

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

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

import java.util.Arrays;

public class Delete3 {

    public static void main(String[] args) {

        int num = 246235789;
        int numDigitRequired = 2;

        System.out.println(getLeastNum(num, numDigitRequired));
    }

    static int getLeastNum(int num, int numDigitRequired) {

        char[] a = (num + "").toCharArray();

        Arrays.sort(a);

        StringBuffer s = new StringBuffer();

        for (int i = 0; i < numDigitRequired; i++)
            s.append(Character.getNumericValue(a[i]));

        return Integer.parseInt(s.toString());
    }
}