创建将字符串转换为双精度并存储它们的数组时出错

时间:2015-04-12 16:29:39

标签: java

我正在尝试编写一个给定序列的代码,(在定义序列的代码中前面提到的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我觉得它与我的第一个代码有关。

任何帮助将不胜感激!

2 个答案:

答案 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所提到的,您应该更清楚地了解数据的显示方式。