A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© heheka123 中级黑马   /  2014-4-9 10:16  /  1631 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. public class demo2 {
  2.         public static void main(String[] args) {
  3.                 char[] num={'黑', '马', '程', '序', '员' };
  4.                 String s1="01234";
  5.                 String s2=num[s1.charAt(2)-'0']+"";//在这里为什么要减去0,如果不写-0为什么出现数组角标越界异常
  6.                 System.out.println(s2);
  7.         }
  8. }
复制代码

6 个回复

正序浏览
本帖最后由 赵小豪 于 2014-4-9 21:57 编辑

此‘0’是 ASCII码中0,不是我们常用的数值0,‘0’的数值是48,而S1是字符串,是由5个字符组成,每个字符都有对应的ASCII码值,数组的下标是数值不是字符,所以我们用数字字符减去字符‘0’都会得到我们需要的数值。我们也知道减去一个数值0等于没有减,所以字符换成数值就是本身的数值当然会超范围。

20140409215313564.jpg (142.22 KB, 下载次数: 71)

字符与ASSII码值

字符与ASSII码值

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 赞一个!

查看全部评分

回复 使用道具 举报
为你而去 来自手机 中级黑马 2014-4-9 14:40:40
地板
你把运算公式做角标时,会自动转换成int类型,若不减'0',s1.charAt(2)的asc码值为50所以角标越界,减'0'之后相当于50-48,得到2,主要弄清楚得到的是是asc码值,而不是字符本身就很容易理解
回复 使用道具 举报
为你而去 来自手机 中级黑马 2014-4-9 14:36:22
报纸
你把运算公式做角标时,会自动转换成int类型,若不减'0'
回复 使用道具 举报
optimisticpig 发表于 2014-4-9 10:44
num[s1.charAt(2)-'0']+""
这句话的意思是查找s1中角标为2的字符,返回的是char类型的'2'而不是整数2,减去 ...

这个就是说字符之间的四则运算都是转换成整形以后在计算,是这样吗?
回复 使用道具 举报
首先你要知道charAt()的返回值是char类型,所以s1.charAt(2)的返回值是'2'而不是2,如果你减去的是0这个时候相当于s2=num[50],编译不会出现问题,但是运行就不行了,因为找不到num[50],会报错,而如果是-'0'相当于s2=num[2],这个是就会打印出 程,

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 赞一个!

查看全部评分

回复 使用道具 举报
num[s1.charAt(2)-'0']+""
这句话的意思是查找s1中角标为2的字符,返回的是char类型的'2'而不是整数2,减去'0'后得到的差才是整数2,然后num[2]对应的是'程'.
char类型的'2'转换正整数是50;‘0'转换成整数是48.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马