【问题标题】:Buggy String Array to Double Array Conversion IssueBuggy 字符串数组到双数组的转换问题
【发布时间】:2017-11-28 13:01:02
【问题描述】:

所以我需要将从 API 中提取的字符串数组转换为双精度数组,以便在某些计算中使用它们。这是我正在测试的内容:

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,但它没有这样做。

我该如何解决这个问题?

【问题讨论】:

  • 您的输入与您得到的输出不一致,导致我相信其中一个或两个可能不准确。无论如何,您的 ConvertStringArrayToDoubleArray() 方法看起来是正确的,并且您的测试用例按预期通过了。所以从那开始,然后继续。
  • 发布一个完整的程序,包含输入,并重现错误。
  • 你是如何输入字符串数组的?

标签: java arrays parsing type-conversion


【解决方案1】:

在您的字符串数组中的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, …

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-12
    • 2014-04-05
    • 1970-01-01
    • 1970-01-01
    • 2014-07-22
    • 1970-01-01
    相关资源
    最近更新 更多