我正在尝试编写一个给定序列的代码,(在定义序列的代码中前面提到的private double []序列),将字符串分隔成一个数组,然后使用Double将字符串值分配给双精度数。 .parseDouble。我从println得到的结果很奇怪。
当我输入“2,3,4”作为s的值时,结果显示为: s:2,3,4 结果:[D @ 1d733e1
这是我的代码:
...
public Sequence(String s)
{
String[] tokens = s.split(",");
System.out.println("s: " + s);
double[] result = new double[tokens.length];
int i = 0;
for(String token:tokens){
result[i++] = Double.parseDouble(token);
}
System.out.println("result: " + result);
}
}
我不知道为什么它会输出那些奇怪的结果。
遵循此方法,我创建了另一种方法来确定数组中的值是否彼此相等。这是我用它的代码:
public boolean allEqual()
{double name = sequence[0];
for(int i = 0; i < sequence.length; i++){
if(sequence[i] != name){
return false;
}
name = sequence[i];
}
return true;
这段代码一直说数组索引超出范围:0我觉得它与我的第一个代码有关。
任何帮助将不胜感激!
答案 0 :(得分:1)
要有意义地打印数组,请使用Arrays.toString(result)
方法。对于您的代码:
System.out.println("result: " + Arrays.toString(result));
这需要完成,因为所有原始toString()
对象的默认array
实现会给出您在上面看到的丑陋输出。它具有一些的含义,但一般来说,您永远不会想要将其打印出来或将其记录在任何地方。
如果您使用像FindBugs
这样的静态代码分析工具,它会警告您这些类型的事情。 http://findbugs.sourceforge.net/
答案 1 :(得分:0)
当你说System.out.println("result: " + result);
你要求Java打印出一个对象时,result
是一个没有默认toString()
方法的数组,所以它显示的是对象的参考,对人眼没有意义。正如@Kon所提到的,您应该更清楚地了解数据的显示方式。