我正在为大学计算机科学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();
}
答案 0 :(得分:1)
您对(int) val.charAt(mod)
所做的工作是获取字符see this的ascii值,该值的确是字符55
的{{1}}。您想要的是7
以获取此字符的数字值。
Character.getNumericValue()
答案 1 :(得分:0)
在我看来,您想根据bucket
数字的最后一位来确定temp
索引(0到9)。您不必使用绕行String
/ charAt
/ getNumericValue()
的方法,而只需使用Java的“除法休息”运算符即可:
int dval = temp % 10;
或广义的(如果您不想坚持10个桶):
int dval = temp % bucket.length;
只需确保temp
不会为负,则除法休息也将变为负:-(。除了更短且更不易出错之外,除法休息方法也快得多