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

Java调用charAt返回ASCII数值而非预期数字问题求解

问题原因
  • Java的String.charAt()方法返回值为char类型,本质是存储字符对应的ASCII编码的数值类型:字符'5'对应的ASCII码为十进制53,字符'4'对应的ASCII码为十进制52。你直接调用Double.valueOf(char)时,会直接把char对应的ASCII码数值转换为double类型,而非将字符字面代表的数字转为数值。
  • 你在测试类中直接打印postfix.charAt(0)得到5,是因为System.out.println对char类型的输出逻辑是打印字符本身,而非对应的ASCII码,因此你之前误以为charAt()返回的是数字5,实际返回的是字符'5'。
解决方法

有两种常用方案可以实现将数字字符转为对应的数值:

  • 方案1:先将字符转为字符串,再转换为Double类型
    修改Notation类的返回逻辑即可:
public static double evaluatePostfixExpression(String postfixExpr)
            throws InvalidNotationFormatException, StackOverflowException, StackUnderflowException {
    // 先转String再转Double
    return Double.valueOf(String.valueOf(postfixExpr.charAt(0)));
}
  • 方案2:利用ASCII码偏移计算
    数字字符'0'到'9'的ASCII码是连续递增的,将目标字符减去'0'的ASCII码即可得到对应的数字值:
public static double evaluatePostfixExpression(String postfixExpr)
            throws InvalidNotationFormatException, StackOverflowException, StackUnderflowException {
    // 利用ASCII偏移计算数字值
    return (double)(postfixExpr.charAt(0) - '0');
}

内容的提问来源于stack exchange,提问作者Anonymous Heat

相关产品推荐
方舟 Agent Plan

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

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