如何操纵另一个类的类?

时间:2013-12-18 12:22:02

标签: java class oop methods

使用Java进行简单的井字游戏。

我有一个名为TicTacToe的类,其中包含大部分程序。 我有一个名为GameHelpers的类,它应该包含帮助游戏的方法。

TicTacToe包含一个数组(JButton buttons[9])和一个int count变量,用于存储用户已经在屏幕上放置了多少X和Os。 (每次用户单击按钮时,它的空白文本将更改为X或O,计数变量将计为++)。

目前,我计划在GameHelpers内编写的唯一方法是名为resetGame()的方法。这种方法应该做两件事:
1-在buttons空白的所有按钮上设置文本 2-将count设置为0。

如果resetGame()TicTacToe内的方法,则很容易。它看起来像这样:

resetGame(){
     for(int i=0;i<9;i++){
          buttons[i].setText("");
     }
     count = 0;
}

resetGame()应该是另一个类GameHelpers内的方法。

我认为我正在尝试做的是非常标准的面向对象编程。这个程序的大部分都有一个类,另一个小类有一些方法可以帮助更大的类。该程序总是围绕更大的类(TicTacToe)。

我有两个问题:

1-上面描述的想法(关于程序围绕的一个主要类,以及帮助的小类),面向对象程序中的标准和通用?

2-您如何编码resetGame()内的方法GameHelpers

谢谢

2 个答案:

答案 0 :(得分:1)

1.-可以使用这种技术,但程序必须依赖的类越少越好。我没有看到简单地在TicTacToe中使用#resetGame方法的问题。

2 .-

public class GameHelper {
public static void resetGame() {
    for(int i=0;i<9;i++){
        TicTacToe.buttons[i].setText("");
    }
    TicTacToe.count = 0;
}
} 

然后您可以使用以下方法从TicTacToe调用此方法:

GameHelper.resetGame();

在这种情况下,GameHelper类是多余的,但我不知道你的程序的完整意图。

答案 1 :(得分:-1)

最佳做法是为你的计数和按钮编写setter和getter,如下所示:(对于计数):

public int getCount() {
return count;
} 

public void setCount(int count) {
  this.count = count;
} 

然后您可以通过以下方式在其他课程中访问它:

TicTacToe ttt = new TicTacToe();
ttt.setCount(0);

由于你不想要一个新的TicTacToe实例,我想你可以这样做: 在GameHelper中写private TicTacToe ttt;然后

public GameHelper(TicTacToe ttt) {
this.ttt = ttt;
}

然后您不必创建新实例,而是在创建GameHelper时传递实例。因此,在初始化GameHelper的TicTacToe中,您可以编写GameHelper gh = new GameHelper(this);

我在这里为你做了一个例子:

    public class TicTacToe {

private int count = 0;

public TicTacToe() {
count = 3;
GameHelper gh = new GameHelper(this);
}

public void setCount(int count) {
this.count = count;
}

public int getCount() {
return count;
}
public void printCount() {
System.out.println("Count:"+count);
}
}



  public class GameHelper {

TicTacToe ttt;
public GameHelper(TicTacToe ttt) {
this.ttt = ttt;
this.ttt.setCount(5);
this.ttt.printCount();
}

}

public class Test {

public static void main(String[] args) {
TicTacToe ttt = new TicTacToe();
}

}