Java charAt方法返回的值甚至不是字符串的一部分
我在大学计算机科学B课程的基数排序实验室工作,但我一直遇到错误。我需要得到某个点上某个数字的值,所以我将该数字转换成字符串,并使用用户字符(2)得到587的一位数。然而,charAt返回55,这毫无意义,然后我得到一个索引越界错误,因为数字应该是0-9之间的一位数字。该方法获取linkedList的头,将其从链接列表中删除,然后获取删除的节点并将其添加到bucket中Java charAt方法返回的值甚至不是字符串的一部分,java,loops,for-loop,linked-list,radix,Java,Loops,For Loop,Linked List,Radix,我在大学计算机科学B课程的基数排序实验室工作,但我一直遇到错误。我需要得到某个点上某个数字的值,所以我将该数字转换成字符串,并使用用户字符(2)得到587的一位数。然而,charAt返回55,这毫无意义,然后我得到一个索引越界错误,因为数字应该是0-9之间的一位数字。该方法获取linkedList的头,将其从链接列表中删除,然后获取删除的节点并将其添加到bucket中 String s = null; String val; for(int i = 0; i <coun
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();
}
字符串s=null;
字符串val;
对于(int i=0;i您正在使用(int)val.charAt(mod)
获取字符的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的“除法rest”操作符,而不是通过字符串
/charAt
/getNumericValue()
迂回:
int dval = temp % 10;
或者一般化(如果您不想只使用10个桶):
只需确保temp
不会变为负值,因为除法剩余值也会变为负值:-(.除了更短、更不容易出错之外,除法-休息法也更快。mod的值是多少?
?mod只是我想要的数字的索引。因此,因为它是一个三位数的数字,我想要mod=2,因为我想要整数的最后一个数字是int
55。更改 int-dval=(int)val.charAt(mod);
toint-dval=Character.digit(mod,10);
对于7
@ElliottFrisch的意思是说int-dval=Character.digit(val.charAt(mod),10);
:)@Mark或int-dval=val.charAt(mod)-“0”;
我最初尝试过,但当我需要10的位置值时,问题出现了,因为我会从587中得到%100和87。对于10的位置,您可以执行(temp%100)/10
。类似地,对于100的位置,执行(temp%1000)/100等。原理是正确的,但Java不使用ASCII。它使用Unicode字符集的UTF-16字符编码(就像VB4/5/6/A/Script、JavaScript、.NET等)。有关charAt
()返回的内容,请参阅。
int dval = temp % bucket.length;