2016-04-25 22 views
1

文字列を文字列に変換して配列に挿入するコードに問題があります。私は様々な方法を試みましたが、これらは期待される出力を与えません。文字配列の代わりに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つの文字の配列でなければなりません: -

[ 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」の70のようなものなので、正確な値は覚えておらず、また覚えたくありません。文字の値を数値自体に変換する必要があります。ヒント:文字は以下のように番号付けされている:

'0' - N

'1' - ように、N + 2

及び - N + 1

'2'。

2

あなたはcharをint配列に格納しています。 > 51(ASCII値)

- したがってtheieそれぞれのASCII値は、(CHAR)

3(あなたが効果的にintに文字を変換している)アレイに格納されます。 (CHAR) - > 46(ASCII値)

1(CHAR) - 3.1であるので、最初の3つの文字は、ASCIIに変換され、> 49(ASCII値)

あなたの配列の長さは3、ではなく3.14

しかし、あなたは、あなたが必要とするすべては、(私はあなたがやろうとしている感じ)char配列にそれを保存したい場合は、今 -

char[] charArray = sPI.toCharArray(); 

プラス、私はあなたに保存したいと思ういけませんint配列はASCIIの値をintのそれぞれの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

その場合(ハードコーディング)、2桁を小数点以下2桁に丸める必要があります。 – RanchiRhino

関連する問題