【问题标题】:array output not correct数组输出不正确
【发布时间】:2013-05-21 19:17:24
【问题描述】:

我正在使用 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

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

【问题讨论】:

    标签: java arrays methods


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 我做到了,不是二维打印,我没有二维
    • 它返回数组的值与, 连接并包含在[] 中,但是“二维”是什么意思?
    • 我以为是二维的,抱歉。但我现在明白了。为什么它会打印出包含 [] 的内容?
    • 这就是它的工作原理,我说不出为什么:docs.oracle.com/javase/6/docs/api/java/util/… 所有其他人都以同样的方式工作。
    【解决方案2】:

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

    [D@264532ba
    

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

    • 遍历每个元素。
    • 使用Arrays.toString(array)。

    奇怪输出的解释

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

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

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

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

    所以输出会是这样的:

    [D@756a7c99
    

    其中[ 表示数组的深度,D 指的是double。 756a7c99 是从 hashCode() 返回的值,为十六进制数。

    另请阅读Class.getName() JavaDoc。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        这里是:

        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-01-10
          • 1970-01-01
          • 2017-07-18
          • 2018-01-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-09-22
          相关资源
          最近更新 更多