如何在这个 3x3 正方形 (kare) 上赋值?

How to assign a value on this 3x3 square (kare)?

我正在尝试创建一个 3x3 方形插槽,我可以用它来玩、分配价值、价值交换...

这个esas变量是我要分配给插槽的数字。我尝试使用这种较长的语法将 5 放入插槽 0,但是当我再次尝试 getEsas 时它变为零。

有没有办法正确执行此操作,或者我可以使用其他方法?

package abc;
import java.util.ArrayList;

public class Sirala {

    public static void main(String[] args) {
        Kare k1=new Kare();
        int aa;
        k1.siram(0).setEsas(5);
        System.out.println(k1.siram(0).getEsas());
    }

    public static int kisa (int ai) {
        Kare k2=new Kare();
        return k2.siram(ai).getA();
    }
}


public class Kare extends Object {

    private int a;
    int x=1;
    int y=1;
    private int esas;

    Kare() {}

    Kare(int x,int y) {
      this.x=x;
      this.y=y;
      a = (x-3+3*y);
    }

    public int getA() {return a;}

    public void setA (int a) {this.a=a;}

    public int getEsas() {return esas;}

    public void setEsas(int esas) {this.esas=esas;}

    public Kare siram (int n1){

        boolean exa=(x==3);
        boolean eya=(y==3);
        Kare[] arr=new Kare[9];

        for (int i=0;i<9;i++) {
            arr[i]=new Kare(x,y);
            if (!exa) {x++;}
            else {
                if (!eya) {x=1;y++;}
                else {x=3;y=3;}
            }
        }
        return arr[n1];
    }
}

打印时得到 0 而不是 5 这一事实一点也不奇怪。

当您第一次调用 k1.siram(0) 时,您正在构建一个数组,填充它,return 数组的第一个元素。当您第二次调用 k1.siram(0) 时,您正在构建一个全新的数组,其第一个元素是您 return。多次调用 k1.siram(0) return 每次都是一个完全不同的元素。您所做的是在 Kare 实例上调用 setter,然后在完全不同的 Kare 实例上调用 getter。如果要打印值 5,可以将 k1.siram(0) 的结果存储在变量中,例如

Kare k_ = k1.siram(0);
k_.setEsas(5);
System.out.println(k_.getEsas());

请注意,Kare[] arr 是一个局部变量,在方法调用期间,它只会在 siram 方法块内有效。对于下一个方法调用,将构建另一个数组。也许您认为每次调用都会引用同一个数组,但事实并非如此。如果您希望您的方法始终引用同一个数组,请将该数组放在方法主体之外。我也觉得填充 3X3 矩阵应该在不同的 class 中完成,而不是在 Kare 中。也许 class 叫做矩阵。

public class Matrix {
    public static Kare[][] matrix = new Kare[3][3];
    //matrix is declared 'static' because it is one per application; 
    //you don't want different instances of Matrix, each one with its own  Kare[][] matrix

    //the equivalent of siram()
    public static void fillMatrix() {
        for(int i=0;i<3;i++)
            for(int j=0;j<3;j++)
                matrix[i][j] = new Kare(i,j);
    }

}

public class Sirala {
   public static void main(String[] args) {

        Matrix.fillMatrix();
        Matrix.matrix[1][2].setEsas(5);
        System.out.println(Matrix.matrix[1][2].getEsas());

        //because matrix field is static, i call it using class name, like Matrix.matrix
        //otherwise, i would have called it   new Matrix().matrix
    }
}

我建议您将以下术语翻译成英文:Sirala、Kare、siram、kisa、esas。这将使代码更容易理解。

我还建议您阅读以下书籍的第 3 章和第 4 章 - http://www2.nsru.ac.th/tung/java_doc/Core%20Java%20Volume%20I-%20Fundamentals%209th%20Edition-%20Horstmann,%20Cay%20S.%20&%20Cornell,%20Gary_2013.pdf - 以更好地理解 Java 基础知识。