2016-04-25 72 views
1

我正在尝试将double转换为字符串的代码问题,然后将其插入到数组中。我尝试过各种方法,但是这些方法并没有给出预期的结果获取ints数组而不是字符数组

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

你的方法输出了什么? – xuhdev

+0

你需要字符串数组还是int数组? –

+0

@RamanShrivastava任何会做.. – RanchiRhino

回答

2

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

请注意,您正在将结果分配给int阵列,而您正在字符上运行。

+0

这真的有帮助提示.. – RanchiRhino

+0

我觉得这个问题(愚蠢)不符合SO的标准。 – RanchiRhino

+1

@RanchiRhino我希望没有扰流板。 – Maroun

1

你在数组中获得的是字符的值(对于'3',我不记得也不想记住确切的值)。您必须将字符的值转换为数字本身。提示:字符被编号以以下方式:

'0' - N的

'1' - n + 1个

'2' - N + 2

等。

2

您正在将字符存储到int数组中。因此theie各自ASCII值将被存储在阵列(你有效地将炭为int)

3(炭) - > 51(ASCII值)

。 (炭) - > 46(ASCII值)

1(炭) - > 49(ASCII值)

您的阵列长度为3,所以只有第一个3个字符被转换成ASCII是3.1,而不是3.14

但是现在,如果你想将它保存到一个字符数组(我觉得你正在试图做的),你需要的是 -

char[] charArray = sPI.toCharArray(); 

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

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 };)。

+0

在这种情况下(硬编码),我应该将double翻倍至两位小数。 – RanchiRhino

相关问题