我想实现一种算法来检查数字是否在某个特定的数字基数中,因为来自数字基数大于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;
}
}