TicTacToe在java中

时间:2015-12-08 18:59:25

标签: java

我对此测试代码有疑问,这是错误error 1 error 2

这是代码 头等舱

import java.util.LinkedList;

import java.util.List;

public class Position {
public char[] board;
public char turn;
public int dim =3;
private int l;

public Position() {
    this.board = "        ".toCharArray();
this.turn = 'x';
}
public Position(char[] board, char turn) {
this.board = board;
this.turn = turn;
}
public Position(String str) {
this.board = str.toCharArray();
this.turn = 'x';
}
public Position(String str, char turn) {
this.board = str.toCharArray();
this.turn = turn;
}

public String toString () {
return new String(board);
}

public Position move (int idx) {
char[] newBoard = board.clone();
newBoard[idx] = turn;
    return new Position(newBoard, turn == 'x' ? 'o' :'x');
}
public Integer[] possibleMoves() {
List<Integer> list = new LinkedList<Integer>();
for (int i = 0; i < board.length; i++) {
if (board[i] == ' ') {
list.add(i);
}
}
Integer[] array = new Integer[list.size()];
list.toArray(array);

return array;
}
public boolean win_line(char turn, int start, int step) {
for (int i = 0; i < 3; i++) {
if (board[start + step*i] != turn) {
return false;
}
}
return true;
}
public boolean win(char turn) {
for (int i = 0; i < dim; i++) {

if (win_line(turn, i*dim, l) || win_line(turn, i,dim)) {
return true;
}
}
if (win_line(turn, dim-1, dim-1) || win_line(turn, 0, dim+1)) {
return true;
}
return false;
}
public int minimax() {
if (win('x')) { return 100; }
if (win('o')) { return -100; }
if (possibleMoves().length == 0) { return 0; }
Integer mm = null;
for (Integer idx : possibleMoves()) {
Integer value = move(idx).minimax();
if (mm == null || turn == 'x' && mm < value || turn == 'o' && value < mm) {
mm = value;
}
}
return mm + (turn == 'x' ? -1 : 1);
}
public int bestMove() {
Integer mm = null;
int best = -1;
for (Integer idx : possibleMoves()) {
Integer value = move(idx).minimax();
if (mm == null || turn == 'x' && mm < value || turn == 'o' && value < mm) {
mm = value;
best = idx;
}
}
return best;
}
public boolean gameEnd() {
return win('x') || win('o') ||  possibleMoves().length ==0;
}
}

第二课考试

import static org.junit.Assert.*;

import org.junit.Test;

public class PositionTest {
  @Test
  public void testNew() throws Exception {
        Position position = new Position();
        assertEquals("        ", position.toString());
        assertEquals('x', position.turn);
  }

  @Test
  public void testMove() throws Exception {
    Position position = new Position().move(1);
    assertEquals(" x      ", position.toString());
        assertEquals('o', position.turn);
  }

  @Test
  public void testPossibleMoves() throws Exception {
        Position position = new Position().move(1).move(3).move(4);
        assertArrayEquals(new Integer[] {0,2,5,6,7,8}, position.possibleMoves());
  }

  @Test
  public void testWin() throws Exception {
        assertFalse(new Position().win('x'));
        assertTrue(new Position("xxx      ").win('x'));
        assertTrue(new Position("   ooo   ").win('o'));
        assertTrue(new Position("x  x  x  ").win('x'));
        assertTrue(new Position("  x x x  ").win('x'));
        assertTrue(new Position("x   x   x").win('x'));        
  }

  @Test
  public void testMinimax() throws Exception {
    assertEquals( 100, new Position("xxx      ").minimax());
    assertEquals(-100, new Position("ooo      ").minimax());
    assertEquals(   0, new Position("xoxoxooxo").minimax());
    assertEquals(  99, new Position(" xx      ").minimax());
    assertEquals( -99, new Position(" oo      ", 'o').minimax());
  }

  @Test  
  public void testBestMove() throws Exception {
        assertEquals(0, new Position(" xx      ").bestMove());
        assertEquals(1, new Position("o o      ", 'o').bestMove());
  }

  @Test
  public void testGameEnd() throws Exception {
        assertFalse(new Position().gameEnd());
        assertTrue(new Position("xxx      ").gameEnd());
  }
}

第三课

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.JButton;
import javax.swing.JFrame;

import javax.swing.JOptionPane;
import javax.swing.SwingUtilities;

public class Game {
  Position position; 
  public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {
          public void run() {
        JFrame frame = new JFrame("Java TTT");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLayout(new GridLayout(3, 3));
                final Game game = new Game();
                final JButton[] buttons = new JButton[9];
                for (int i =0; i < 9; i++) {
                  final int idx = i;   
          final JButton button = new JButton();
                  buttons[i] = button;
                  button.setPreferredSize(new Dimension(100,100));
                  button.setBackground(Color.BLACK);
                  button.setOpaque(true);
                  button.setFont(new Font(null, Font.PLAIN, 100));
                  button.addMouseListener(new MouseListener() {
                        public void mouseReleased(MouseEvent e) {}
                        public void mousePressed(MouseEvent e) {}
                        public void mouseExited(MouseEvent e) {}
                        public void mouseEntered(MouseEvent e) {}                      

                        @Override
                        public void mouseClicked(MouseEvent e) {
              button.setText("" + game.position.turn);
                          game.move(idx);              
              if (!game.position.gameEnd()){                      
                                int best = game.position.bestMove();
                                buttons[best].setText("" + game.position.turn);
                                game.move(best);  
                        }
                          if (game.position.gameEnd()) {
                                String message = "";  
                                if (game.position.win('x')) {
                  message = "You Won !!";             
                } else if (game.position.win('o')){
                                message = "Computer Won !!";
                                } else {
                                    message = "Draw";
                                }  
                                JOptionPane.showMessageDialog(null, message);

                        }    
                        }});
                  frame.add(button);
                }
                frame.pack();
                frame.setVisible(true);
          }
        });
  }
  protected void move(int idx) {
    position = position.move(idx);

  }    

}
  

1- java.lang.AssertionError:数组长度不同,expected.length = 6   actual.length = 5

     

2-java.lang.AssertionError:expected:&lt; 0&gt;但是:&lt; 100&gt;

1 个答案:

答案 0 :(得分:-1)

断言单元测试用例运行中的错误告诉您实际结果与预期结果不符。因此,您的代码无法正常工作,您必须解决此问题。

请发布出现这些错误的行。

相关问题