2017-02-23 18 views
-1
クラスGameController.javaに私のスタックのインスタンスをしながら、私は問題を抱えています

の定義:スタック参照変数

import java.awt.*; 

public class GameController implements ActionListener { 

private GameModel model; 
private MyStack<DotInfo[][]> dots; 
private int size; 

/** 
* Constructor used for initializing the controller. It creates the game's view 
* and the game's model instances 
* 
* @param size 
*   the size of the board on which the game will be played 
*/ 
public GameController(int size) { 
    this.size = size; 
    model = new GameModel(size); 
    dots = (MyStack<DotInfo[][]>) new DotInfo[size][size]; 
} 

/** 
* resets the game 
*/ 
public void reset(){ 
    model.reset(); 
} 

/** 
* Callback used when the user clicks a button (reset or quit) 
* 
* @param e 
*   the ActionEvent 
*/ 

public void actionPerformed(ActionEvent e) { 

} 

/** 
* <b>selectColor</b> is the method called when the user selects a new color. 
* If that color is not the currently selected one, then it applies the logic 
* of the game to capture possible locations. It then checks if the game 
* is finished, and if so, congratulates the player, showing the number of 
* moves, and gives two options: start a new game, or exit 
* @param color 
*   the newly selected color 
*/ 
public void selectColor(int color){ 
    Stack<DotInfo[][]> newStack = new DotInfo[size][size]; 
    for (int i=0;i<size;i++) { 
     for (int j=0;j<size;j++) { 
      if (model.dots[i][j].isCaptured()) { 
       dots.push(dots[i][j]); 
      } 
     } 
    } 
    while (model.getCurrentSelectedColor()!=color) { 
     color=model.setCurrentSelectedColor(color); 
     //for (int i=0;i<) 
    } 
} 
} 

これは私のStack.javaクラスです:

public class MyStack<T> implements Stack<T> { 

private T[][] array; 
private int size; 

public MyStack(int size) { 
    this.size = size; 
    array = (T[][])new Object[size][size]; 
} 

public boolean isEmpty() { 
    return size==0; 
} 

public T peek() { 
    return array[size][size]; 
} 

public T pop() { 
    T popped = null; 
    popped = array[size][size]; 
    size--; 
    return popped; 
} 

public void push(T element) { 
    size++; 
    array[size][size]=element; 
} 
} 

Iスタッククラスを正しい方法で定義したかどうかも疑問でした。ちょっとした助けに感謝します。

+0

コードはコンパイルされますか? 'dots'はStackとして定義されています。各要素はDotInfoオブジェクトの2次元配列です。コンストラクタ内の' dots'の初期化は、Java 8とJavaの 'dots = new MyStack <>();'古いJavaの実装では 'dots = new MyStack (); –

答えて

0

コンストラクタで内部位置フィールドを0に設定する必要があり、引数sizeではなく、スタックが正しく機能しません。

public class MyStack<T> implements Stack<T> { 

private Object[] array; 
private int size, int position; 

public MyStack(int size) { 
    this.size = size; 
    position = 0; 
    array = new Object[size]; 
} 

public boolean isEmpty() { 
    return position < 1; 
} 

public T peek() { 
    if (isEmpty()) 
     throw new RuntimeException("Stack is empty"); 

    return (T)array[position]; 
} 

public T pop() { 
    if (isEmpty()) 
     throw new RuntimeException("Stack is empty"); 

    return array[position--]; 
} 

public void push(T element) { 
    if (position >= size - 1) 
     throw new RuntimeException("Stack is full"); 

    array[++position]=element; 
} 

} 

また[サイズ] [サイズ]は単にスタック用【サイズ】(1次元配列)を使用し、その常に、あなたの積み重ねオブジェクトに対角線無用である、下記式Tの作業スタックであります

また、すべてでスタックを使用する理由あなたが作るボードゲームのために、ちょうどのような2次元配列を使用します。

public class Dot { 
    //whatever information you need about a dot here 

    //As example just say Hello 
    public void sayHello() { 
     System.out.println("Hello"); 
    } 
} 

をと2D-配列としてそれを使用する:

//this are chess board dimensions (8 x 8) 
public static final int SIZE_X = 8; 
public static final int SIZE_Y = 8; 

//create the board, made of Dot instances 
Dot[][] board = new Dot[SIZE_X][SIZE_Y]; 

特定のドットを見つけて使用するには

//get reference of dot at position x, y 
Dot dot = board[x][y]; 

//check if it exists, and if it does, make it sayHello() 
if (dot != null) { 
    dot.sayHello(); 
} 
+0

私はスタック配列を代入に使う必要があります –

+0

私は自分のGameController.javaクラスでスタックをどのように初期化するのですか? –

+0

use stackArr = new MyStack [size]; – CrowsNet