当前位置: 首页 > 知识库问答 >
问题:

在我的java TictaToe游戏中无法获得正确的输出

闻人锦
2023-03-14

嗨,伙计们,我的作业真的需要帮助。我试着做它,但是我不能解决它。

起始板:

1  2  3     

4  5  6     

7  8  9

期望结果:

x  2  3

o  x  6

7  o  x

然而,每次执行时,每当有赢家时,我总是得到以下信息:

x 2 3

o x 6 

7 o 9

最后,如何计算获胜次数最多的玩家的胜率?

限制:

> < li>

您必须对井字游戏棋盘使用2D阵列。(我知道我没有使用2D数组,因为我不知道如何让编译器接受来自2D数组的1-9个输入。)

不能对此问题使用类。

如果愿意,可以使用静态方法。

import java.util.Scanner;
public class TicTacToe {    public static String answer = "yes";
public static Scanner input = new Scanner(System.in);
public static String getName(int noPlayer) {
    System.out.print("Enter name of Player " + noPlayer + ": ");
    return input.next();
}

public static int getMove(String board[], String player) {
    printBoard(board);
    System.out.print("Enter move for " + player + ": ");
    int move = input.nextInt() - 1;
    while (moveTaken(board, move)) {
        System.out.println("Move taken.");
        System.out.print("Enter move for " + player + ": ");
        move = input.nextInt() - 1;
    }
    return move;
}
public static String gameResult(String board[]) {
    final int checkWin[][] = {{0, 1, 2}, {3, 4, 5}, {6, 7, 8},
                                    {0, 3, 6}, {1, 4, 7}, {2, 5, 8},
                                    {0, 4, 8}, {2, 4, 6}};
    for (int[] i: checkWin) {
        if (board[i[0]].equals(board[i[1]]) && board[i[0]].equals(board[i[2]]) && board[i[1]].equals(board[i[2]])) {
            if (board[i[0]].equals("O")) {
                return "X wins";
            }
            else {
                return "O wins";
            }
        }
    }
    if (!board[0].equals("1") && !board[1].equals("2") && !board[2].equals("3") &&
        !board[3].equals("4") && !board[4].equals("5") && !board[5].equals("6") &&
        !board[6].equals("7") && !board[7].equals("8") && !board[8].equals("9")) {
        return "draw";
    }
    return "not completed";
}
public static boolean moveTaken(String board[], int move) {
    if (board[move].equals("O") || board[move].equals("X")) {
        return true;
    }
    return false;
}
public static void printBoard(String board[]) {
    System.out.println(" " + board[0] + " " + board[1] + " " + board[2] +
                       "\n" +
                       " " + board[3] + " " + board[4] + " " + board[5] +
                       "\n" +
                       " " + board[6] + " " + board[7] + " " + board[8]);
}
public static void conclusion(String result, String pO, String pX) {
    if (result.equals("O wins")) {
        System.out.println(pO + " wins!");

    }
    else if (result.equals("X wins")) {
        System.out.println(pX + " wins!");
    }
    else {
        System.out.println("Draw.");
    }
}
public static void main(String args[]) {

      String X = getName(1);
      String O = getName(2);

  int count = 1;
  do{   

    String nextPlayer = X;
    String board[] = {"1", "2", "3", "4", "5", "6", "7", "8", "9"};
    int move;
        while (gameResult(board).equals("not completed")) {
            move = getMove(board, nextPlayer);
            if (nextPlayer == X) {
                board[move] = "X";
                nextPlayer = O;
            }
            else {
                board[move] = "O";
                nextPlayer = X;
            }
        }
    System.out.println("game up to date: " + count);

   conclusion(gameResult(board), X, O);

    System.out.println("Do you want to play again? yes or no");
     answer = input.next();
     count++; 


}
    while(answer.equalsIgnoreCase("yes"));




  }
}

共有1个答案

公羊新
2023-03-14

在执行移动之前,您只能在< code>getMove中打印纸板。因此,不会显示最后一次移动。

游戏结束时,您应该添加对printBoard的调用。

这里有一个可能添加它的地方:

...
System.out.println("game up to date: " + count);
printBoard(board);
conclusion(gameResult(board), X, O);
...
 类似资料:
  • 这些是说明。。。编写一个计算行星测量值的类。 > 用这些方法写一个类。 初始化行星周长为英里或公里的构造函数 计算行星测量值的方法-圆,面积,直径,半径,表面,面积,体积 使用你的类编写一个程序,要求用户输入行星的周长,创建一个行星对象,用逗号和小数打印行星的测量值,确保小数对齐。 这是我的输出,示例用户输入为:100

  • 我试图正确地结束这个游戏,但是做而循环或我正在做的事情导致游戏继续进行。如果有人进一步建议我在得分达到99分后结束这场比赛,我将不胜感激。我已经粘贴了两个类源。我也是学生,所以请原谅我。 类 如果需要,其他类,但它与分数无关,因为它主要用于确定一些值:

  • 我是合并排序的新手,我能够使用整数数组int[]解决合并排序,但是每当我尝试使用ArrayList实现它时,我似乎根本无法正确排序。我试图理解为什么会这样,以及使用相同的方法和变量名的实际解决方案是什么。 上面代码的输出是: 但是,我不明白为什么输出不是:

  • 我正在写一个方法,它接受用户的整数输入,并显示总数、平均值、最大值和最小值。 我有总数和平均工作,但我得到2147483647最大和-2147483648最小。 循环只能在用户输入-1时结束。 我的代码:

  • 好吧,首先,我想让你们知道,我已经一年多没有使用python了,所以如果答案很明显,我只是愚蠢,那么请原谅我的无知哈哈。 接下来,我正在创建一个太空入侵者类型的游戏,除了从主屏幕切换到游戏屏幕外,一切都进行得很顺利。这可能只是我用来改变屏幕的方法,但我以前在其他程序中使用过这种方法,从来没有出现过任何问题。或者可能只是试图同时运行太多进程。不管怎样,我找不到任何类似的问题,所以我求助于寻求帮助。

  • 我使用 Flink SQL 和 CEP 来识别一些非常简单的模式。但是,我发现了一件奇怪的事情(可能是一个错误)。我有两个示例表和,如下所示。 转移 password_change 以下是我的SQL查询。 首先创建一个临时视图事件作为 rowtime列是直接从原始eventtime列中提取的事件时间,水印周期范围为1秒。 然后输出查询结果 它应该输出 但在运行Flink 1.11.1时,我什么也没