Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java charAt方法返回的值甚至不是字符串的一部分_Java_Loops_For Loop_Linked List_Radix - Fatal编程技术网

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

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

我在大学计算机科学B课程的基数排序实验室工作,但我一直遇到错误。我需要得到某个点上某个数字的值,所以我将该数字转换成字符串,并使用用户字符(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();

 }
字符串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);
to
int-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;