我是Java的新手,几天前从头开始。我尝试使用Eclipse IDE来了解“for”循环的功能。
package day1.examples; public class MatrixClass { public static void main(String[] args) { // TODO Auto-generated method stub int[][] a = new int[4][3]; int temp=15; int i = 0; int j = 0; a[i][j]=0; for (i = 0; i < 4; i++) { System.out.println(); for (j = 0; j < 3; j++) { a[i][j]=temp; temp = temp + 15; System.out.print(a[i][j] + " "); } } } }
输出:
15 30 45
60 75 90
105 120 135
150 165 180
上述程序效果很好,我得到了所需的输出。我不明白的是需要一个临时变量。为什么不能使用现有变量本身来增量? 当我尝试增加现有变量(a [i] [j])时,为什么输出中的值没有增加,即使代码被执行了?
package day1.examples;
public class MatrixClass {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[][] a = new int[4][3];
//int temp=15;
int i = 0;
int j = 0;
a[i][j]=0;
for (i = 0; i < 4; i++) {
System.out.println();
for (j = 0; j < 3; j++) {
//a[i][j]=temp;
a[i][j] = a[i][j] + 15;
System.out.print(a[i][j] + " ");
}
}
}
}
输出:
15 15 15
15 15 15
15 15 15
15 15 15
答案 0 :(得分:3)
默认情况下,数组初始化为默认值。阅读本文:
因此,当您为每个单元格添加15时,您有a[i][j] = 0 + 15;
您称之为临时变量的语言是流行语accumulator (definition #7)。
计算器或计算机中用于保存计算或数据传输的中间结果的寄存器。
每次循环时此值都会更改,这就是值不同的原因。如果您不使用临时变量,则必须每次都根据i
和j
的值计算结果(在这种情况下,使用类似(i * 3 + j) * 15
的公式)< / p>
答案 1 :(得分:2)
您最后一个示例中的a[i][j] = a[i][j] + 15;
行取a[i][j]
值,并将其增加15.您的代码中没有任何地方初始化矩阵的值,因此所有值都为0. / p>
当您了解每次a[i][j]
或i
更改时j
指向新变量时,您就会理解所有内容。
这意味着矩阵中的所有值都是15。
我会像这样制作循环:
for (int i = 0; i < 4; i++) {
System.out.println();
for (int j = 1; j <= 3; j++) {
a[i][j-1] = 15 * (j + (i * 3))
System.out.println(a[i][j-1] + " ");
}
}
答案 2 :(得分:1)
在第一种情况下,您将一个临时变量声明为15,并在每次将其存储在数组中时将其值增加15,而在第二种情况下,您将获取a [i] [j]的值并且因为[i] ] [j]仅针对[0] [0]而不是针对其他人进行初始化,因此根据语言标准,它会自动初始化为数组primitve类型,在本例中为int,对于int,默认值为零。因此,每次只显示0 + 15,即15。
答案 3 :(得分:0)
关键是当移动到下一个元素时不会清除temp
,这允许它累积来自所有单元格的值。如果你想在没有临时变量的情况下这样做,你需要在添加15之前以某种方式将值从一个元素复制到下一个元素。