2017-06-25 174 views
0

因此,我需要將我從API中拖動的字符串數組轉換爲雙精度數組,以便在某些計算中使用它們。這就是我與測試:Buggy String Array to Double Array Conversion

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,然後在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, …