我想实现一个算法来检查一个数字是否在特定的记数基数中,因为大于 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;
}
}
关于java - 检查由字符串表示的数字是否在特定的计数基础中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34270847/