2017-06-25 23 views
0

私はいくつかの計算で使用できるように、APIからDoublesの配列にプルする文字列を変換して配列する必要があります。私は出力としてこれを与えられたことを実行したときバグのある文字列配列からダブル配列への変換問題

public static double[] ConvertStringArrayToDoubleArray(String[] sArr) 
{ 
    double[] dArr = new double[sArr.length]; 

    for (int i = 0; i < sArr.length; i++) 
    { 
     try 
     { 
      dArr[i] = Double.parseDouble(sArr[i]); 
     } 
     catch (NumberFormatException e) 
     { 
      System.out.println("Could Not Convert Properly at position " + 
      String.valueOf(i)); 
     } 
    } 
    return dArr; 
} 

public static void main(String[] args) throws Exception 
{ 
    String[] dmgs = new String[5]; 
    dmgs[0] = "1.2"; 
    dmgs[1] = "1.3"; 
    dmgs[2] = ""; 
    dmgs[3] = "-"; 
    dmgs[4] = "8"; 
    double[] dDmgs = new double[dmgs.length]; 
    dDmgs = ConvertStringArrayToDoubleArray(dmgs); 
    for (int i = 0; i < dDmgs.length; i++) 
    { 
     System.out.println(dDmgs[i]); 
    } 
} 

:ここで私がテストしていたものだ

Could Not Convert Properly at position 2 Could Not Convert Properly at position 3 1.2 1.3 0.0 0.0 8.0

私が欲しかったものです。しかし、私はこの配列とそれを実行すると:

[1.5, 1.5, 2.7, 0.3, 1, 6, 10, 8, 3.5, 3, 8.5, 5, 2, 6, 6, 16, 17, 16, 15, 5, 16, 15, , , , 7, 3, 3, 6, 3, 4.5, 3, 5, 8, 6, 4.5, 3, 2.2, 6, 13, 9, 4, 7, 8, 5, 1.35, 2.7, 9, 8.5, 8, 9, 8.5, 8, 8, 6, 6, 7, 6, 6.5, 5, 3, -, 2, -, 0.2, 0.2, 0.2, 3, 3, -, -] 

私はこの代わりに取得する:

[1.5, 1.5, 2.7, 0.3, 1.0, 6.0, 10.0, 8.0, 3.5, 3.0, 8.5, 5.0, 2.0, 6.0, 6.0, 16.0, 17.0, 16.0, 15.0, 5.0, 16.0, 15.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 8.0, 6.0, 4.5, 3.0, 2.2, 6.0, 13.0, 9.0, 4.0, 7.0, 8.0, 5.0, 1.35, 2.7, 9.0, 8.5, 8.0, 9.0, 8.5, 8.0, 8.0, 6.0, 6.0, 7.0, 6.0, 6.5, 5.0, 3.0, 0.0, 2.0, 0.0, 0.2, 0.2, 0.2, 3.0, 3.0, 0.0, 0.0] 

私はArrays.toStringを使用しています*()これらのスペースがある理由ですので、印刷します。

とにかく、私の人生のために、22位から28位のコンバージョンに何が起こっているのか分かりません。私はそれがちょうど位置22から24を0.0に設定し、次に位置25で7.0と継続すると仮定しますが、そのことはしません。

これを修正するにはどうすればよいですか?

+0

あなたの入力があなたが得ている出力と矛盾するので、どちらかまたは両方が不正確かもしれないと私は信じています。いずれの場合でも、あなたの 'ConvertStringArrayToDoubleArray()'メソッドは正しく見え、あなたのテストケースは期待どおりに渡されます。だからそれから始めて、次に進む。 –

+1

入力を含む完全なプログラムを投稿し、エラーを再現する。 –

+0

どのように文字列の配列を入力していますか? –

答えて

0

16, 15の後、8, 6の文字列配列では、カンマからは11個の要素(空の文字列の最初の3文字)があるように見えます。 16.0, 15.0の後、8.0, 6.0の前のダブル配列では、わずか7つの要素(すべて0.0)しかありません。だから、これらが同じ実行から来ていると仮定すると、ConvertStringArrayToDoubleArray()という文字列の中にはカンマが含まれていることがあり、そのために倍精度として解析することはできません。しかし、最初の出力が示すように、メソッドはこれらのメッセージを出力するはずです。これらの文字列のどれも0.0に解析できないため、適切に変換できない文字列の位置に関する出力に7メッセージはありませんか?

たとえば、配列に次の7文字列が含まれているとします。"", "", "", "7, 3", "3, 6", "3, 4.5", "3, 5"。これにより、文字列配列の出力に…, , , , 7, 3, 3, 6, 3, 4.5, 3, 5, …が含まれ、倍精度配列の出力に…, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, …が含まれる理由を説明します。

関連する問題