gpt4 book ai didi

java - 实例变量的值在两个类中是不同的。为什么? (+更多问题)

转载 作者:行者123 更新时间:2023-12-01 14:42:32 25 4
gpt4 key购买 nike

我有一个 TurnIndicator 类,其方法 getTurn(); 仅返回 "BLACK", "BLACK" 字符串,然后在“白色”“黑色”之间交替。

在我的 Board 类中,它组合了包中的所有类并使其协同工作,我创建了 TurnIndicator 类的实例 _turn,并声明一个实例变量_t,初始值为_t = _turn.getTurn();然后,我为 _t 定义了一个访问器方法 - getT()

现在,当我在 Board 类中打印 _t 值时,它会打印“BLACK”、“BLACK”等。但是,当我在另一个类 SelectPieceListener 中使用 getT() 访问 _t 值时,会打印 null.

为什么会这样?

我在下面附上了我的类定义。不相关的部分被删除。

我最终想要做的是根据c == _st.checkMoveImpossible()条件,让玩家在两个选项之间进行选择 -

1. 通过单击选择按钮(在本例中,_cmi 变为 1,并且 selectClicked() 方法对 if(_cmi == 1) block 执行所需的操作。更具体地说,它更改 _t 值的顺序,以便玩家跳过一圈),或

2. 通过单击滚动按钮(在本例中,_cmi 变为 2,并在 scrollClicked() 中执行类似的操作 方法让当前玩家移动其他玩家的棋子。)。

我通过将所有内容放入 selectClicked() 方法中,仅使 _cmi == 1 案例操作起作用,但我必须提供 _cmi==2 情况(当玩家单击滚动按钮时),所以我必须将其与方法解耦。

现在,我一直在尝试使其在 SelectPieceListener 类中工作,以便稍后如果成功的话我可以将其移动到 Board 类中。

但是,我几个小时内所做的每一次尝试都失败了。我一次编写了一两个类的代码,这是我第一次做包含多个类的项目。我对这种事情真的没有经验。

如果您能给我一些建议,这将对我有很大帮助。

我知道这确实是一项乏味的工作,但我自己可能无法完成..请花一些时间阅读代码并帮助我。

public class Board {
private Structure _st;
private TurnIndicator _turn;
private String _t;
private int _cmi;

public Board() {
_turn = new TurnIndicator();
_t = _turn.getTurn();
_cmi = 0;
}

public ScrollListener getScroll(){
return _scroll;
}

public String getT() {
return _t;
}
public int setcmi(int cmi) {
return _cmi = cmi;
}

public void selectClicked(char dir) {
int index = _scroll.getX();
HNode<ArrayList<String>> current = _st.getPosition(index);
System.out.println("checkMoveImpossible() = " + _st.checkMoveImpossible());
System.out.println("_t in Board = " + _t);

if(!current.getDatum().isEmpty()) {

if(_t == current.getDatum().get(current.getDatum().size()-1) && _cmi == 0) {
if(0 <= index && index < 17 && index != _st.indexOfSpBack()) {
current.forward(_t, current.getDatum().size());
}
else if(17 <= index && index < 25) {
char direction = dir;
_st.start(current, direction);
}
else if(index == _st.indexOfSpBack()) {
current.backward(_t, current.getDatum().size()-1);
}

_t = _turn.getTurn();
System.out.println("turn is "+ _t);
display();
}


else if(_t != current.getDatum().get(current.getDatum().size()-1) && _cmi == 0) {
String s = _t == "WHITE" ? "BLACK" : "WHITE";
System.out.println("It's "+_t+"'s turn now and only "
+s+" can move this piece.");
}

}

if(_cmi == 1) {
_t = _turn.getTurn();
_cmi = 0;
System.out.println("_cmi if block is reached");
display();
}
update();

}

下面是 SelectPieceListener 类定义

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;


public class SelectPieceListener implements ActionListener {
private Board _board;
private Structure _st;
private String _t;

public SelectPieceListener(Board board) {
_board = board;
_st = _board.getStructure();
_t = _board.getT();
}

@Override
public void actionPerformed(ActionEvent e) {
char c = _t == "WHITE" ? 'b' : 'w';
_board.selectClicked('l');
System.out.println(_t);
if(c == _st.checkMoveImpossible()) {
String theOther = _t == "WHITE" ? "BLACK" : "WHITE";
System.out.println("No possible move for "+_t+": click select to skip turn, " +
"or click scroll to move " + theOther + " pieces.");
_board.setcmi(1);
_board.update();
_board.selectClicked('l');
}

}
}

最佳答案

嗯,

我发现你有一些我不推荐的东西。 SelectPieceListener 中的 _t 和 _st 字段不是必需的,因为您可以从 _board 字段获取它们,如果没有必要,为什么要保留重复的引用?

另一方面,我看到您使用 == 进行了很多字符串比较,您应该始终使用“STRING_LITERAL”.equals(variable)。

之后,我建议您使用 Eclipse 这样的 IDE,以便您可以调试部分代码。如果您的变量为 null,则它可能在某个时候丢失,调试器将是查找问题的最佳方法。

关于java - 实例变量的值在两个类中是不同的。为什么? (+更多问题),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15805789/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com