Java中int变量num为何得到未赋值的50并触发数组越界错误?
问题解答
num返回50的原因
你直接将char类型的数字字符赋值给了int类型变量,Java会自动把char类型转换为对应的ASCII编码值:
- 你调用
num方法时传入的初始i值为0,方法内部先执行i = i+2得到i=2,调用str.charAt(2)取到的是字符'2' - 字符
'2'对应的十进制ASCII编码值就是50,直接赋值给int类型的num就会得到50,而非你预期的数字2。
修复方法
要把字符形式的数字转为对应的十进制数值,只需要用取到的字符减去字符'0'的ASCII值即可,修改num方法的逻辑如下:
public static int num(String str, int num, int i) { i = i+2; // 字符数字转对应数值,减去'0'的ASCII值 num = str.charAt(i) - '0'; return num; }
补充提示:Java的基本类型参数是值传递,你在
num和char1方法内部修改的i、j不会同步到main方法的原始变量中。如果要处理字符串内所有的数字+字符对,建议直接在main方法中写循环遍历,每次索引加2即可,不需要拆分两个方法处理,逻辑会更清晰。
内容的提问来源于stack exchange,提问作者Kr0nox
相关产品推荐
相关产品推荐

