我想实现一种算法来检查数字是否在某个特定的数字基数中,因为来自数字基数大于10的数字在其组成数字中都由字符表示,我被迫使用字符串。

我的实现思路如下:

private String values = "0123456789ABCDEF";

private boolean check_base(String number,String base) {
    StringBuilder no = new StringBuilder(number);
    while (no.length() != 0) {
        if (no.charAt(number.length() - 1) != '.' && values.indexOf(no.charAt(number.length() - 1)) >=
                values.indexOf(no.charAt(Integer.parseInt(base)))) {
            return false;
        }
        no.deleteCharAt(no.length() - 1);
    }
    return true;
}


我没有任何想法为什么它会崩溃我的调试看起来像这样:

private boolean check_base(String number,String base) { base: "16" number: "1.011.0"
    StringBuilder no = new StringBuilder(number); no: "1.011.0" number: "1.011.0"
    while (no.length() != 0) {


在此while循环之后,我的应用程序崩溃了。我认为这是由于'.'引起的,但这就是no.charAt(number.length() - 1) != '.'条件的原因,所以我认为这不是问题,也不是我使用values.indexOf(no.charAt(number.length() - 1))的事实,但我不知道为什么这会导致崩溃。

最佳答案

好的,这是您的固定代码。试试看,并与您的版本进行比较。
您有no.charAt(number.length() - 1)这是错误的,因为number不变。您需要在那里no,例如no.charAt(no.length() - 1)。另外,您还有另一个小问题。

public class Test0030 {

    public static void main(String[] args) {
        System.out.println(check_base("1.017.0", "8"));
        System.out.println(check_base("1.017.0", "7"));
        System.out.println(check_base("1.01F.0", "16"));
        System.out.println(check_base("1.01F.0", "15"));
    }

    private static String values = "0123456789ABCDEFG";

    private static boolean check_base(String number, String base) {
        StringBuilder no = new StringBuilder(number);
        while (no.length() != 0) {
            if (no.charAt(no.length() - 1) != '.'
                    &&
                    values.indexOf(no.charAt(no.length() - 1)) >=
                    values.indexOf(values.charAt(Integer.parseInt(base)))) {
                return false;
            }
            no.deleteCharAt(no.length() - 1);
        }
        return true;
    }
}

10-07 19:48
查看更多