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



我正在大学计算机科学B课程的基数排序实验室工作,但我一直遇到错误。我需要获得某个位置的一个数字的值,因此我将数字转换为字符串,并使用用户charAt(2(获得587的一位数字。然而,charAt返回55,这毫无意义,然后我得到了一个索引越界错误,因为该数字应该是0-9中的一位数字。该方法获取linkedList的头,将其从链表中删除,然后获取已删除的节点并将其添加到bucket中。

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();
}

您对(int) val.charAt(mod)所做的是获取字符的ascii值,请参阅,这实际上是字符755。您想要的是Character.getNumericValue()来获取该字符的数值。

String str = "7";
System.out.println((int) str.charAt(0)); // Prints 55
System.out.println(Character.getNumericValue(str.charAt(0))); // Prints 7

在我看来,您似乎想根据temp数字的最后一位来决定bucket索引(0到9(。不需要经过String/charAt/getNumericValue()迂回,只需使用Java:的"division rest"运算符

int dval = temp % 10;

或者广义的(如果你不想只坚持10个桶(:

int dval = temp % bucket.length;

只要确保temp不会变为负数,那么除法休息也会变为负数:-(。除法休息方法除了更短、更不容易出错外,速度也快得多。

相关内容

  • 没有找到相关文章

最新更新