调用方法并返回值?抖音



我在使displayWinner方法工作时遇到问题。我相信我的调用没有以我认为应该的方式工作,因为我不太熟悉使用多个方法,因为这个概念是最近才引入的。

代码如下:

import java.util.*;
public class tic
{
    public static void main(String[] args) 
    {
        Scanner in = new Scanner(System.in);
        boolean flag=false;
        char[][] board = 
        {
        {' ', ' ', ' '},
        {' ', ' ', ' '},
        {' ', ' ', ' '}
        };
        boolean done = false;
        int player = 1;
        int row = 0;
        int col = 0;
        while (flag != true) 
        {
          checkForWinner(board);
          System.out.println("Enter the row and column for your next move");
          row = in.nextInt();
          col = in.nextInt();
          if (player == 1) 
          {
            board[row][col] = 'X';
            player = 2;
            checkForWinner(board);
           }
          else 
          { 
            board[row][col] = 'O';
            player = 1;
            checkForWinner(board);
          }
          printBoard(board);
          checkForWinner(board);
        }
        displayWinner(player, flag);  

    }
    public static void printBoard(char[][] board) 
    {
    for (int row = 0; row < 3; row++) 
    {
        for (int col = 0; col < 3; col++) 
        {
            System.out.print("|" + board[row][col] + "|");
        }
        System.out.println();
        System.out.println("-------");
    }
    }
    public static boolean checkForWinner(char[][] board)
   {
       // checkForWinner() method determines if a pattern of data stored
       // in the 2 D char array indicates the a player has won the game.
        boolean flag = false;
        boolean flag1 = false;
        boolean flag2 = false;
        boolean flag3 = false;
        boolean flag4 = false;
        // checks the contents of each row for matching data   
        for (int i = 0; i <= 2; i++)
        {
            if ((board[i][0] == board[i][1] && board[i][1] == board[i][2]) && board[i][2] != ' ') 
                flag1 = true;
        }
         // checks the contents of each column for matching data
        for (int j = 0; j <= 2; j++)
        {
            if ((board[0][j] == board[1][j] && board[1][j] == board[2][j]) && board[2][j] != ' ') 
                flag2 = true;
        }
        // checks the contents of one diagonal for matching data
        if ((board[0][0] == board[1][1] && board[1][1] == board[2][2]) && board[2][2] != ' ') 
                flag3 = true;
        // checks the contents of the other diagonal for matching data
        if ((board[0][2] == board[1][1] && board[1][1] == board[2][0]) && board[2][0] != ' ') 
                flag4 = true;
        // checks if any of the previous conditions evaluated to true        
        if (flag1 == true || flag2 == true || flag3 == true || flag4 == true)
            flag = true;
       // returns true if a winner was found; returns false is no winner     
       return flag;
   } // end of checkForWinner method
   public static void displayWinner(int player, boolean flag)
   {
    if (flag == true)
    {
        int currentplayer;
        currentplayer=player;
        System.out.println("The winner of the game is" +currentplayer);
    }

   }
}

displayWinner方法在底部,主方法中的while循环是玩游戏并让每个玩家轮流玩的循环。

编辑:我的问题是如何将标志从checkForWinner方法传递到displayWinner方法,以便它可以打印出游戏的获胜者?

您没有更新main方法中声明的flag。更改每个

checkForWinner(board);

flag = checkForWinner(board);

没有这个flag永远不会改变,也永远不会离开while (flag != true)(可以简化为while(!flag))循环,这意味着你永远不会执行displayWinner(player, flag)方法。

你需要让标志真正改变——当它应该是flag = checkWinner(board);时,你有checkWinner(board);——你还需要调用两次函数(一次在循环开始时,一次在结束时),这是不需要的,你应该去掉开头的那个。此外,您的checkWinner(board)方法也不起作用,因为如果一行或一列具有相同的字符,并且在开始时它们都具有相同的字母("),则它将返回true,因此它将立即注册获胜,而不是让它检查一行或列是否与玩家的一个字符匹配。

相关内容

  • 没有找到相关文章

最新更新