1

我正在使用 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 是一个类,字符串文件名刚刚通过。在完成所有这些并将 Quest3 对象放在我的主菜单中之后。我运行程序,输入我所有的值等,这些值被放入 Quest 2 类的数组中,然后我将它们写入文件。

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

     [D@264532ba

如何解决这个问题以在文件中获取我的双变量?

4

4 回答 4

3

打印出Arrays.toString而不是仅仅打印出数组(调用其toString继承自Object):

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

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

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

于 2013-05-21T19:19:28.413 回答
1

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

[D@264532ba

您有两个选项来打印数组的内容:

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

奇怪输出的解释

让我解释一下以下代码:

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

array是一个对象,因此您正在调用println(Object)( PrintStream) System.out,它toString()在内部调用传递的对象。该数组toString()类似于ObjecttoString()

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

所以输出会是这样的:

[D@756a7c99

其中[表示数组的深度,并Ddouble. 756a7c99hashCode()作为十六进制数返回的值。

另请阅读Class.getName()JavaDoc

于 2013-05-21T19:21:20.460 回答
0

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

于 2013-05-21T19:20:54.517 回答
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));
}
于 2013-05-21T19:25:21.557 回答