获取整数数组而不是字符数组

时间:2016-04-25 07:00:21

标签: java

我正在尝试将double转换为字符串然后将其插入数组的代码问题。我尝试了各种方法,但这些方法没有给出预期的输出。

public int[] makePi() {
  double PI = Math.PI;

  String sPI = String.valueOf(PI);
  int[] Arr = new int[3];

  for(int i =0; i<3; i++)
  {
    Arr[i] = sPI.charAt(i);
  }

  return Arr; 
}

输出应该是具有PI的前三个字符的数组,如下所示: -

[ 3, 1, 4 ]当我得到[51, 46, 49]

如果需要,我会处理十进制字符。

只需提示一下。

请不要提供完整的程序,这将是一个扰流板。 : - )

4 个答案:

答案 0 :(得分:2)

查看ASCII表。你看到你得到的整数的相应字符是什么吗?这应该是一个很好的暗示。

请注意,当您在字符上运行时,您将结果分配给int数组。

答案 1 :(得分:2)

您将字符存储到int数组中。因此,各自的ascii值将存储在数组中(您有效地将char转换为int)

3(char) - &gt; 51(ASCII值)

。 (char) - &gt; 46(ASCII值)

1(char) - &gt; 49(ASCII值)

你的数组长度是3,所以只有前3个字符转换为ascii,这是3.1,而不是3.14

但是现在如果你想将它存储到一个char数组中(我觉得你正在尝试做),你只需要 -

char[] charArray = sPI.toCharArray();

另外,我不认为你想存储在int数组中,好像你可以将ascii值转换为它们各自的int值,但是'。'这不是一个有效的int。

答案 2 :(得分:1)

你在数组中得到的是字符值(因此对于&#39; 3&#39;,我既不记得也不想记住确切的值)。您必须将字符值转换为数字本身。提示:字符按以下方式编号:

&#39; 0&#39; - n

&#39; 1&#39; - n + 1

&#39; 2&#39; - n + 2

等等。

答案 3 :(得分:1)

如果你想提取数字的数值,我建议不要对字符值进行显式比较和算术。

Character class提供了帮助方法,这些方法不易出错且更易读:

int outIndex = 0;
for (int i = 0; i < 3 /* && i < sPI.length() */; ++i) {
  char c = sPI.charAt(i);
  if (Character.isDigit(c)) {
    Arr[outIndex++] = Character.getNumericValue(c);
  }
}
/* assert outIndex == 3 */
return Arr;

我已经注释了一些代码,我将其放在那里以获得更强大的功能 - 在这种情况下并不是绝对必要的,因为我们知道sPI至少有3位数字。 (请注意,如果我们要对这个假设进行硬编码,我们也可以简单地return new int[] { 3, 1, 4 };)。