Java charAt 方法返回的值甚至不是字符串的一部分
Java charAt method returning values not even part of the string
我正在为我的大学计算机科学 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();
}
你用 (int) val.charAt(mod)
做的是获取字符 see this 的 ascii 值,对于字符 7
确实是 55
。你要的是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)。您可以使用 Java:
的 "division rest" 运算符,而不是走 String
/ charAt
/ getNumericValue()
弯路
int dval = temp % 10;
或一般化(如果您不想严格遵守 10 个桶):
int dval = temp % bucket.length;
只需确保 temp
不会变为负数,因为除法余数也会变为负数:-(。除了更短且不易出错之外,除法余数方法也是一种快很多。
我正在为我的大学计算机科学 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();
}
你用 (int) val.charAt(mod)
做的是获取字符 see this 的 ascii 值,对于字符 7
确实是 55
。你要的是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)。您可以使用 Java:
String
/ charAt
/ getNumericValue()
弯路
int dval = temp % 10;
或一般化(如果您不想严格遵守 10 个桶):
int dval = temp % bucket.length;
只需确保 temp
不会变为负数,因为除法余数也会变为负数:-(。除了更短且不易出错之外,除法余数方法也是一种快很多。