需要一个临时变量

时间:2014-05-12 12:35:56

标签: java

我是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

4 个答案:

答案 0 :(得分:3)

默认情况下,数组初始化为默认值。阅读本文:

因此,当您为每个单元格添加15时,您有a[i][j] = 0 + 15;


您称之为临时变量的语言是流行语accumulator (definition #7)

  

计算器或计算机中用于保存计算或数据传输的中间结果的寄存器。

每次循环时此值都会更改,这就是值不同的原因。如果您不使用临时变量,则必须每次都根据ij的值计算结果(在这种情况下,使用类似(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之前以某种方式将值从一个元素复制到下一个元素。