java - 我的多维数组代码无法正常工作

标签 java multidimensional-array

我下面的代码给出了意想不到的输出。 我想要做的是创建一个多维数组,然后在循环中用 x、y、z 的值填充它。但由于某种原因,它只填充了所有元素中 x、y、z 的“最大”值。相反,它应该填充当前值。如果您取消注释第一行 System.out,您将看到我真正想要的结果。

public class Test{

public static void main( String args[] ){


int[][] a= new int[ 150 ][3];

int[] val = new int[3];
int increment =0;

for( int x=0; x<10; ++x ){
for( int y=0; y<5; ++y ){
for( int z=0; z<3; ++z ){

val[0]=x; val[1]=y; val[2]=z;

a[ increment ]=val; 
++increment;
//System.out.println( x+" "+y+" "+z+" "+ increment )

} } }// for

for( int s=0; s<increment; ++s ){ System.out.println( a[ s ][0]+" "+ a[ s ][1]+" "+ a[ s ][2]+" "+ s ); }


}//main
}//class

我的输出:

9 4 4 0
9 4 4 1
9 4 4 increment

预期输出:

0 0 0 0
0 0 1 1
0 0 2 2
...
0 1 1 3
0 1 2 4
    .
    .
    .
upto so on

我做错了什么?

最佳答案

您在 val 中设置值,然后在 a 的每个单元格中设置对 val 的引用。因此,当 val 的值发生变化时,所有 引用的值都会发生变化,因此它们都变成了 9,4,4。最后一个值是 s ,它在你的循环中不断递增。这样你就得到了那个输出。

要获得所需的输出,只需在每次迭代前重置 val。添加这一行:

val = new int[3];

作为最内层 for 循环的第一行。

关于java - 我的多维数组代码无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38159717/

相关文章:

java - ViewPager - 将数据从 fragment 发送到 Activity 时发生 Android 错误 setCurrentItem(int,boolean)

java - 地址值显示为空

c++ - 打印 3D 指针数组的元素

php - 按 2 列对多维数组进行排序

javascript - 将多维数组传递给javascript中的函数

javascript - 将数据从一维数组推送到二维数组

java - 在 JavaFX 中实现撤消/重做

java - 为什么在构建 docker 镜像时 apk jdk11 安装突然停止工作?

java - onResume() 忽略 ListView 过滤器

c++ - 无法理解函数