非常简单的代码(将变量分配给2d数组)不起作用

时间:2012-02-08 23:27:57

标签: java arrays

代码是:我想要的只是1s ......简单到了吗?

int[][] myArr = new int[100][100];
System.out.println(myArr);

for (int i =0; i< myArr.length; i++) {
    for (int j=0; j< myArr[i].length; j++) {
        myArr[i][j] = 1;
    }
}

在两个印刷语句下它只打印出[[I @ 22911fb5 (我不知道这意味着什么?)感谢您的帮助,我已经尝试将双括号放在其他地方,但一切都是无用的

4 个答案:

答案 0 :(得分:5)

这是因为数组的默认toString方法与默认的Object方法类似,也就是说,它会给你一个令人困惑的哈希码。

System.out.println(Arrays.deepToString(arr))

应该给你一个用大括号格式化的好结果。

答案 1 :(得分:1)

这个老栗子......

试试这个:

System.out.println(Arrays.toString(myArr));

遗憾的是,数组不会覆盖toString()方法。默认实现(在Object.java中)是打印[,后跟一个表示数据类型的字符,然后是@,然后是十六进制的哈希码。

答案 2 :(得分:0)

你不能只打印那样的数组。当你尝试打印它时,Java会在底层对象上调用toString(),它只返回数组的内存地址。  您需要在循环中打印元素,如下所示:

int[][] myArr = new int[100][100];
    //Fill the array
    for (int i =0; i< myArr.length; i++) {

        for (int j=0; j< myArr[i].length; j++) {

            myArr[i][j] = 1;

        }

    }
    //Print the array
    for (int i =0; i< myArr.length; i++) {

        for (int j=0; j< myArr[i].length; j++) {

            System.out.print(myArr[i][j]);

        }
        System.out.println("");

    }

答案 3 :(得分:0)

您的代码可能正常。您的调试语句可能会使用一些工作。 System.out.println()只调用toString()的{​​{1}}方法,它会吐出类似myArr(内存地址)的内容,这是继承自的[[I@22911fb5的默认功能toString()。如果您想查看值是什么,请在内循环中尝试Object