数组输出不正确

时间:2013-05-21 19:17:24

标签: java arrays methods

我使用2个类和一堆方法在数组中存储内容然后将其写入文件。我写了一些东西到文件后,而不是var double, 这是我的代码:

public void storeArray(Quest1 a, Quest2 b, String filename) throws   FileNotFoundException{

PrintWriter k = new PrintWriter(filename);
for(int i = 0; i < a.getDays(); i++)
{
    k.println(b.storeArr(a));
}

k.close();
System.out.println("Written.");
}

Quest 1是一个类,Quest 2是一个类,String文件名刚刚通过。 完成所有这些并将Quest3对象放在我的主菜单中。 我运行程序,输入我在Quest 2类中放入数组的所有值等,然后将它们写入文件。

我打开该文件以检查它是否有效,我得到了这个:

     [D@264532ba

如何修复此问题以获取文件中的双变量?

4 个答案:

答案 0 :(得分:3)

打印Arrays.toString而不是打印出数组(调用从toString继承的Object):

k.println(Arrays.toString(b.storeArr(a)));

或者如果您想要一些自定义格式,可以使用Apache Commons中的StringUtils.join。或者,如果您不能使用任何依赖项,也许只需编写一个循环。

您输出的内容是数组的toString,它的类型([D)+ @ +其哈希码(264532ba)。

答案 1 :(得分:1)

数组使用toString()的默认实现,以及为什么数组的输出是:

[D@264532ba

您可以通过两种方式打印数组的内容:

  • 迭代每个元素。
  • 使用Arrays.toString(array)

奇怪输出的说明

让我解释下面的代码:

double[] array = new double[10];
System.out.println(array);

array是一个对象,因此您正在调用println(Object) PrintStream ObjecttoString(),它在内部调用传递的对象上的System.out。数组的toString()类似于hashCode()&#39; s Class.getName() JavaDoc

toString()

所以输出结果如下:

getClass().getName() + "@" + Integer.toHexString(hashCode());

其中[D@756a7c99 代表数组的深度,[代表Ddouble是从{{3}}返回的十六进制数值。

另请阅读{{3}}。

答案 2 :(得分:0)

如果storeArr返回数组,则可以使用Arrays.toString(b.storeArr(a))

答案 3 :(得分:0)

这里:

k.println(b.storeArr(a));

您正在打印b.storeArr(a)这是一个数组对象。

这样做:

PrintWriter k = new PrintWriter(filename);
for(int i = 0; i < a.getDays(); i++)
{
    b.storeArr(a);
    k.println(Arrays.toString(b));
}