如何在这个 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 基础知识。
我正在尝试创建一个 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 基础知识。