I'm having problems getting my displayWinner method to work. I believe my calls aren't working in the way I think they should because I'm not very familiar with using multiple methods as this concept was only recently introduced.
The code is the following:
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);
}
}
}
The displayWinner method is at the bottom and the while loop in the main method is the one that plays the game and gives each player their turn.
Edit: My question would be how do I pass the flag from the checkForWinner method to the displayWinner method so that it can print out who the winner of the game is?
You are not updating flag
declared in your main
method. Change each of
checkForWinner(board);
to
flag = checkForWinner(board);
Without this flag
will never change and you will never leave your while (flag != true)
(which could be simplified to while(!flag)
) loop which means you will never execute displayWinner(player, flag)
method.