You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 21:54:04