为了账号安全,请及时绑定邮箱和手机立即绑定

Java charAt 方法返回的值甚至不是字符串的一部分

Java charAt 方法返回的值甚至不是字符串的一部分

哆啦的时光机 2022-01-12 13:55:01
我正在为我的大学计算机科学 B 课程开发一个基数排序实验室,但我一直遇到错误。我需要在某个位置获取数字的值,为此我将数字转换为字符串并使用用户 charAt(2) 来获取 587 的个位数。但是,charAt 返回 55,这是没有意义的然后我得到一个索引越界错误,因为该数字应该是 0-9 的一位数字。该方法获取linkedList的头部,将其从链表中删除,然后获取删除的节点并将其添加到存储桶中。  String s = null;  String val;    for(int i = 0; i <count;i++){     int temp = (Integer)tempNode.getValue();     val = temp+"";     int dval = (int) val.charAt(mod);     tempNode =(name.removeFirst(s));     bucket[dval].addToEnd(tempNode);     tempNode = name.getHead(); }
查看完整描述

2 回答

?
qq_笑_17

TA贡献1818条经验 获得超7个赞

你正在做的(int) val.charAt(mod)是获取字符的 ascii 值,看看这确实是55为 character 7。你想要的是Character.getNumericValue()得到这个字符的数值。


String str = "7";


System.out.println((int) str.charAt(0)); // Prints 55

System.out.println(Character.getNumericValue(str.charAt(0))); // Prints 7


查看完整回答
反对 回复 2022-01-12
?
阿晨1998

TA贡献2037条经验 获得超6个赞

在我看来,您想bucket根据数字的最后一位来确定索引(0 到 9)temp。相反,通过持续的StringcharAt/getNumericValue()绕路,你可以使用Java的“分工休息”操作:

int dval = temp % 10;

或广义(如果你不想坚持正好 10 个桶):

int dval = temp % bucket.length;

只要确保它temp不会变成负数,因为除法休息也会变成负数:-(。除了更短且不易出错之外,除法休息方法也快得多。


查看完整回答
反对 回复 2022-01-12
  • 2 回答
  • 0 关注
  • 287 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号