2013-05-21 78 views
1

我正在使用2个类和一堆方法来将某些数据存储在数组中,然后将其写入文件。我写的东西到一个文件,而不是被VAR双, 后,这是我的代码:数组输出不正确

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."); 
} 

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

我打开该文件,请检查其是否工作,我得到这个:

 [[email protected] 

如何解决这个问题,让我的双变量在文件中?

回答

3

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

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

或者,如果你想要一些自定义格式,你可以使用StringUtils.join从Apache的百科全书。或者,如果你不能使用任何依赖关系,也许只是写一个循环。

事情你输出是数组,这是它的类型([D)+ @ +其散列码(264532ba)的toString

+0

我这样做,而不是其在2个维度印刷,我没有2个维度 – roro

+0

它返回该数组的与'加入了值,'和包围在'[]' ,但“2维”是什么意思? –

+0

我认为这是2个维度,对不起。但我现在明白了。为什么它打印它随附的[]? – roro

0

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

+0

感谢您的帮助! – roro

1

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

[[email protected] 

你有两个选择要打印的数组的内容:

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

怪异输出的说明

让我解释一下下面的代码:

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

array是一个对象,因此,您所呼叫的PrintStreamprintln(Object)System.out),其中要求toString()内部传递的对象。该阵列的toString()类似于ObjecttoString()

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

所以输出会是这样的:

[[email protected] 

其中[ represnts阵列的深度和Ddouble756a7c99是作为十六进制数从hashCode()返回的值。

也请阅读Class.getName() JavaDoc

+0

感谢您的帮助! – roro

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)); 
} 
+0

感谢您的帮助! – roro