【问题标题】:Converting array of Strings to array of doubles [duplicate]将字符串数组转换为双精度数组[重复]
【发布时间】:2016-03-04 21:43:38
【问题描述】:

我有一个字符串数组。用户(希望)将用 {"word", "word", ...} 填充它,然后再填充一些双精度值/值。我需要在前两个单词之后获取所有这些值,将它们解析为双精度值,然后将它们添加到双精度数组中。例如,如果字符串数组是 {"add", "key", "2", "4", "5", "1"},我的新双精度数组将返回 {1, 2, 4, 5, 1 }。这是一个代码 sn-p,让我知道你能用它做什么。作为参考,getOption() 是返回字符串数组的方法。谢谢!

public double[] getValues(){
    double values[] = new double[getOption().length - 2]; //first two values cannot be parsed to double
    for (int i = 2; i < getOption().length; i++){
        double valueDouble;
        valueDouble = Double.parseDouble(getOption()[i].trim());
        values[i] = valueDouble;
    }
    return values;
}

我正在尝试使用 for 循环来提取一个值 (getOption()[i]),将其解析为双精度值,将其添加到值数组中,然后重新开始循环,直到字符串数组结束 ( getOption()) 已到达。

编辑:忘了提及我的问题:它什么也不返回,并在几秒钟内抛出 ArrayOutOfBoundsException 1 。

【问题讨论】:

  • 你有什么问题?
  • 添加了一个编辑:它抛出一个 arrayoutofboundsexception 1
  • values[i] = valueDouble; 应该是values[i-2] = valueDouble;

标签: java arrays string parsing for-loop


【解决方案1】:

首先要注意的是:

values[i] = valueDouble;

应该是:

values[i - 2] = valueDouble;

由于您已将 options 偏移 2,但 values 并未反映这一点。

另外,你真的应该考虑存储getOptions() 的结果。这可能就是为什么你遇到它什么都不返回的问题,因为每个都可能不同。这将是getOptions() 需要用户输入或可能在调用之间更改的情况。它也更快更清晰。

String[] options = getOptions();
double values[] = new double[options.length - 2]; 
// ...

【讨论】:

  • 感谢您的建议。我添加了 values[i - 2] 位(很好的建议!)并按照您的建议创建了 String[] 选项。尽管如此,当我在调用 getValues() 的控制器方法中调用我的 switch case 时,我仍然得到 java.lang.ArrayIndexOutOfBoundsException: 1 。它将调用 getValues() 的行标记为问题。
  • @Qdhcjv It marks the line that calls getValues() as the issue. 是像getValues()[1]那样调用方法的那一行,还是getValues()方法里面的那一行?
  • 它在 HashMap put 语句中调用 getValues()。 (dataMap.put(keyString, getValues()))。 keyString 是输入的键,getValues() 是该键的值数组。
  • @Qdhcjv 测试corrected code appears to work fine。问题可能来自其他地方。
  • 嗯...我会继续挖掘我的代码。谢谢!
【解决方案2】:

首先,您永远不应该说“用户不会那样做”,因为您无法确定这一点。

其次,您的 values 数组从索引 2 开始,它只有 4 个位置。当你给它赋值时,你应该从中减去 2:values[i - 2] = valueDouble;

【讨论】:

  • 感谢您的提示!我知道我不能相信用户正确输入它——但为了我们的任务(这是高中水平:/),我们可以预料到它,并且当用户做错时抛出错误是可以的。跨度>
  • 如果您知道如何处理异常,那么您会没事的。希望你已经解决了这个问题。
  • 我正在使用 values[i - 2],我仍然看到错误。 99% 确定它与我的 getValues() 调用有关,所以问题仍然存在。不过正在努力。
【解决方案3】:

您应该使用values[i-2]。它认为它会解决问题;)

【讨论】:

    猜你喜欢
    • 2014-07-22
    • 1970-01-01
    • 1970-01-01
    • 2012-12-12
    • 1970-01-01
    • 2017-10-06
    • 2014-01-06
    相关资源
    最近更新 更多