[英]problem accessing an int[] from another class java
我尝试运行以下代码,但是由于某些原因,从类IntelligentPlayer
访问field.playField
时始终会收到NullPointerException
public class IntelligentPlayer extends RealPlayer {
private int[][] winning = new int[][]{{0, 1, 2}, {3, 4, 5}, {6, 7, 8}, {0, 3, 6}, {1, 4, 7}, {2, 5, 8}, {0, 4, 8}, {2, 4, 6}};
protected Field field;
protected int self;
public int move(int move) {
for (int[] possibility:winning) {
return fieldCount(possibility, 3)[1];
}
}
private int[] fieldCount(int[] test, int len) {
System.out.println("" + test[0] + test[1] + test[2]);
System.out.println(field.playField[2]);
int[] temp = new int[]{0, 0, 0};
for (int i = 0; i < len; i++) {
if (field.playField[test[i]]==self) {
temp[0]+=1;
}else if (field.playField[test[i]]==(self*-1)) {
temp[1]+=1;
} else {
temp[2]+=1;
}
}
return temp;
}
}
public class Field {
int[][] winning = new int[][]{{0, 1, 2}, {3, 4, 5}, {6, 7, 8}, {0, 3, 6}, {1, 4, 7}, {2, 5, 8}, {0, 4, 8}, {2, 4, 6}};
public int[] playField = new int[9];
protected char[] symbols = new char[]{'O', ' ', 'X'};
private int turn;
private RealPlayer player1;
private RealPlayer player2;
public Field(RealPlayer pl1, RealPlayer pl2) {
this.player1 = pl1;
this.player2 = pl2;
this.player1.field = this;
this.player2.field = this;
this.player1.self = -1;
this.player2.self = 1;
this.playField = new int[]{0, 0, 0, 0, 0, 0, 0, 0, 0};
}
}
编辑:测试代码是:
Field f = new Field(new RealPlayer(), new IntelligentPlayer(), -1);
f.move(2);
System.out.println(f.toString());
f.move(2);
System.out.println(f.toString());
f.move(0);
我期望fieldCount
返回一个int数组,但是得到了这个:
java.lang.NullPointerException
at TicTacToe.IntelligentPlayer.fieldCount(IntelligentPlayer.java:60)
at TicTacToe.IntelligentPlayer.move(IntelligentPlayer.java:24)
at TicTacToe.Field.move(Field.java:50)
删除protected Field field;
从您的IntelligentPlayer
类中。 这将允许类访问在父类中定义的field
字段(这是Field
构造函数所设置的)。
更好的是,在RealPlayer
定义一个setter并使用它而不是直接分配变量:
public void setField(Field field) {
this.field = field;
}
public Field(RealPlayer pl1, RealPlayer pl2) {
this.player1 = pl1;
this.player2 = pl2;
this.player1.setField(this);
this.player2.setField(this);
this.player1.self = -1;
this.player2.self = 1;
this.playField = new int[]{0, 0, 0, 0, 0, 0, 0, 0, 0};
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.