我正在尝试将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]
如果需要,我会处理十进制字符。
只需提示一下。
请不要提供完整的程序,这将是一个扰流板。 : - )
答案 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 };
)。