"将数字字符数组转换为int值。"
以下是代码:
public static int parseInt(char[] a){
int result=0;
for(int i=0;i<a.length;i++){
result=result*10+(a[i]-'0');
}
return result;
}
我的问题是:为什么我们在此方法中需要-'0'
?
第二个问题是:如果它不是数字字符,例如,如果它只是一个字符数组,例如char[] a={'a','b','c','d','e'}
?
如何调整代码以将其转换为数值?
答案 0 :(得分:1)
字符&#39; 0&#39;到&#39; 9&#39;等价于48到57的int值,因此要获取char表示的值,必须将其减去48。
对于你的第二个问题,什么意味着转换&#39; a&#39;变成数值?
答案 1 :(得分:0)
你的问题比第一眼看上去更有趣。普通人使用基数为10的数字,并且在任何已知的0到9的字符集数字中都有连续值。所以“x”的值,其中“x”是从“0”到“9”的字符是“x” - “0”。
但数学家在任意基数中使用数字。基数2(二进制),8(八进制)和16(十六进制)对于信息学家来说是最新的,但是基数12(及其导数60)在小时,分钟和秒中间接使用。较旧的货币系统部分使用12,因为除以2,3或4是准确的。
Java通过Character.getNumericValue(char c)
承认这些任意基础:
因此,对大量字符的泛化将是:
public static int parseInt(char[] a){
int result=0;
for(int i=0;i<a.length;i++){
result=result*base+(Character.getNumericValue(a[i]);
}
return result;
}
你可以控制它为char[] a={'a','b','c','d','e', 'f'}
的十六进制提供正确的结果,其中base = 16。