首页 > 解决方案 > 如何使用 setter 方法更改矩阵(二维数组)中的元素?

问题描述

我正在尝试用 Java 制作我的个人数独生成器,但我对矩阵的 setter element 方法有疑问。

字段类:

public void setField(int [][] field){
    this.field = Arrays.copyOf(field, field.length);
}

public int[][] getField() {
    return Arrays.copyOf(field, field.length);
}

//Change the element of the field
public void setElement (int i, int j, int n) {
    getField()[i][j] = n;
    setField(getField());
}

主要的:

    // First Print
    for (i = 0; i < field.getField().length; i++) {
        System.out.println();
        for (j = 0; j < field.getField()[i].length; j++)
            System.out.print(field.getField()[i][j]);
    }

    System.out.println();
    System.out.println("Select Row");
    i = input.nextInt();
    System.out.println("Select Column");
    j = input.nextInt();
    System.out.println("Put Number");
    n = input.nextInt();

    field.setElement(i,j,n);

    // Second Print
    for (i = 0; i < field.getField().length; i++){
        System.out.println();
        for (j = 0; j < field.getField()[i].length; j++)
            System.out.print( field.getField()[i][j]);
    }

我不知道为什么第二个打印与第一个相同。

标签: javaarrays

解决方案


您正在setFieldgetField方法中创建矩阵的副本

public void setField(int [][] field){
    this.field = Arrays.copyOf(field, field.length);
}

public int[][] getField() {
    return Arrays.copyOf(field, field.length);
}

在你的方法中这样做setElement

  1. 获取原始矩阵的副本。
  2. 更改副本的元素
  3. 设置原始矩阵的副本

在这里,您的代码带有解释每个步骤的注释:

 public void setElement (int i, int j, int n) {
     // 1 - Get a copy of the original matrix   
     getField() 
                // 2 - Change an element of the copy                                
                [i][j] = n;

              // 3.a - get a copy of the original matrix
     // 3.b - Set the copy                      
     setField(getField());
}

所以最终效果不会改变原始矩阵。

您可以通过以下方式获得所需的结果:

public void setField(int [][] field){
    this.field = field;
}

public int[][] getField() {
    return field;
}

//Change the element of the field
public void setElement (int i, int j, int n) {
    field[i][j] = n;
}

推荐阅读