字符串编号=(" 5,25,77,44,64,8,55,28,86,35");
我想从字符串返回一个double值数组。我无法使用以下代码成功完成此操作:
public static double[] fillArray(String numbers)
{
String[] answers = numbers.split(",");
double[] boom = new double[answers.length];
for (int index = 0; index < answers.length; index++)
{
boom[index] = Double.parseDouble(answers[index]);
}
return boom;
}
我得到的错误很奇怪......
[De56f047c
为什么会这样,我该如何解决?
答案 0 :(得分:8)
您在阵列上呼叫toString()
- 并且数组不会覆盖Object.toString()
。所以你从Object.toString()
得到了行为:
类Object的toString方法返回一个字符串,该字符串由对象为实例的类的名称,符号字符“@&#39;”以及哈希代码的无符号十六进制表示形式组成。宾语。换句话说,此方法返回一个等于值的字符串:
getClass().getName() + '@' + Integer.toHexString(hashCode())
相反,请在结果上调用Arrays.toString(double[])
,这样就可以了。所以这段代码:
double[] array = fillArray("5,25,77,44,64,8,55,28,86,35");
System.out.println(Arrays.toString(array));
...给出的结果是:
[5.0, 25.0, 77.0, 44.0, 64.0, 8.0, 55.0, 28.0, 86.0, 35.0]
我真的希望所有数组都覆盖toString()
。这会让生活更简单......
答案 1 :(得分:1)
如果我按照你的意愿行事,你可以使用它 -
public static void main(String[] args) {
String numbers = ("5,25,77,44,64,8,55,28,86,35");
List<Double> al = new ArrayList<Double>();
for (String str : numbers.split(",")) {
al.add(Double.valueOf(str));
}
double[] boom = new double[al.size()];
for (int i = 0; i < al.size(); i++) {
boom[i] = al.get(i);
}
System.out.println(Arrays.toString(boom));
}
输出是,
[5.0, 25.0, 77.0, 44.0, 64.0, 8.0, 55.0, 28.0, 86.0, 35.0]
答案 2 :(得分:0)
您没有正确打印出数组结果。
double[] array = fillArray("5,25,77,44,64,8,55,28,86,35");
你可能这样做了:
System.out.println(array);
但你不能这样做打印出一个数组。
你得到的结果是
对象是实例的类的名称,at符号字符“@”,以及对象的哈希码的无符号十六进制表示。
您需要遍历数组,或使用Arrays.toString(array[])
例如:
for (double d : array) {
System.out.print(d + " ");
}
或者简单地说:
System.out.println(Arrays.toString(array));