Java “令人困惑”;将数字字符数组转换为int值;行为
“将数字字符数组转换为int值。” 代码如下:Java “令人困惑”;将数字字符数组转换为int值;行为,java,Java,“将数字字符数组转换为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; } publicstaticintparseint(char[]a){ int结果=0; 对于(int i=0;i字符“0”到“9”相当于in
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;
}
publicstaticintparseint(char[]a){
int结果=0;
对于(int i=0;i字符“0”到“9”相当于int值48到57,因此要获得由字符表示的值,必须将其减去48
对于第二个问题,将“a”转换为数值意味着什么?你的问题比乍一看更有趣。普通人使用以10为基数的数字,并且在任何已知的字符集中,从0到9的数字都是连续的值。因此,“x”的值(其中“x”是从“0”到“9”的字符)是“x”-“0”
但数学家使用的数字是任意基数。对于信息学家来说,基数2(二进制)、8(八进制)和16(十六进制)是最新的,但基数12(及其导数60)是以小时、分钟和秒为单位间接使用的。旧的货币系统部分使用基数12,因为除以2、3或4是精确的
Java通过Character.getNumericValue(char c)
确认这些任意基,它给出:
- “x”-“0”表示字符“0”到“9”
- 'x'-'a'+10表示字符'a'到'z'(包括导数:'e'与'e'相同)
- “X”-“A”+10表示字符“A”到“Z”(包括大写导数)
因此,对于更多字符,您函数的泛化是:
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;
}
publicstaticintparseint(char[]a){
int结果=0;
对于(int i=0;问题的第二部分是如此荒谬,以至于我几乎笑得要死。“我如何调整代码以将[字母字符]转换为数值?”-好的,只要你能告诉我有多少只羊是zzz
sheep,你就可以肯定我会第一个回答……如果我调用[0]时a={'1','2','5'}是一个int值,它是49,所以我们需要减去'0',它是48?为什么我们在调用[0]时可以直接得到int值?因为一个字符不是int,即使这两种类型之间存在自然转换…看看这个,你应该得到它: