Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中的TicTacToe_Java - Fatal编程技术网

java中的TicTacToe

java中的TicTacToe,java,Java,我有这个测试代码的问题,这是错误 这就是代码 头等舱 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.tur

我有这个测试代码的问题,这是错误

这就是代码 头等舱

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 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);

  }    

}
导入java.awt.Color;
导入java.awt.Dimension;
导入java.awt.Font;
导入java.awt.GridLayout;
导入java.awt.event.MouseEvent;
导入java.awt.event.MouseListener;
导入javax.swing.JButton;
导入javax.swing.JFrame;
导入javax.swing.JOptionPane;
导入javax.swing.SwingUtilities;
公开课游戏{
位置;
公共静态void main(字符串[]args){
SwingUtilities.invokeLater(新的Runnable(){
公开募捐{
JFrame=新的JFrame(“Java TTT”);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(新的GridLayout(3,3));
最终游戏=新游戏();
最终JButton[]按钮=新JButton[9];
对于(int i=0;i<9;i++){
最终int idx=i;
最终JButton按钮=新JButton();
按钮[i]=按钮;
按钮。设置首选尺寸(新尺寸(100100));
按钮。背景(颜色。黑色);
按钮。设置不透明(true);
button.setFont(新字体(null,Font.PLAIN,100));
button.AddMouseStener(新的MouseStener(){
公共无效MouseEvent e{}
public void mousePressed(MouseEvent e){}
公共无效mouseExited(MouseEvent e){}
公共无效mouseenterned(MouseEvent e){}
@凌驾
公共无效mouseClicked(MouseEvent e){
按钮.setText(“+game.position.turn”);
移动游戏(idx);
如果(!game.position.gameEnd()){
int best=game.position.bestMove();
按钮[best].setText(“+game.position.turn”);
游戏。移动(最佳);
}
if(game.position.gameEnd()){
字符串消息=”;
如果(游戏位置赢('x')){
message=“你赢了!!”;
}else if(游戏位置赢('o')){
message=“计算机赢了!!”;
}否则{
message=“Draw”;
}  
showMessageDialog(空,消息);
}    
}});
框架。添加(按钮);
}
frame.pack();
frame.setVisible(true);
}
});
}
受保护的无效移动(int idx){
位置=位置移动(idx);
}    
}
1-java.lang.AssertionError:数组长度不同,应为。长度=6 实际长度=5

2-java.lang.AssertionError:应为:但为:


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


请将出现这些错误的行张贴出来。

为什么在第一个类中没有缩进,但在其他两个类中没有缩进?编辑第一个类,使其看起来像其他两个。作为一个一般提示(也是一个很好的实践),我会在代码中的某个地方设置一个断点,然后逐步执行,直到出现断言错误。编辑:你是否否决了这个答案??如果是这样的话,在编写TTT和弄乱代码之前,先学习使用junit并理解基本java。。。如果你只需要发布一个额外的号码,我不会玩你的整个程序来发现你的错误。它说结果不等于预期值,就是这样。
没有错误或异常,只是返回值错误。。。一旦你理解了这一点,你可以回答这个评论。
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);

  }    

}