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

时间:2018-11-10 18:52:32

标签: java loops for-loop linked-list radix

我正在为大学计算机科学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 个答案:

答案 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不会为负,则除法休息也将变为负:-(。除了更短且更不易出错之外,除法休息方法也快得多