954,536 Members — Technology Publication meets Social Media
Username:
Password:
Lost login information?
Have something to say? Contribute New Article Reply to this Article

Problem with Program ...Need some advice..

Hello there,
I am having problems with this code i have written and it is a tic tac toe program. It runs and everything but it doesn't get a winner when i call the method getWinner. this method is suppose to return 'x', 'o' , or ' ' depending onwhether X, O or no one is the winner. Oh yeah a player wins only if they have three-in-a-row, in a row, a column, or a diagonal.. ?? I am just stuck on what to do.. i need your advice or something.. Oh yeah i'm using BlueJay.. thanks ..

JT ....

/**
* A class that represents a tic-tac-toe board
*
*
* @author J T ...
*/
public class TicTacToe {
private char[][] board;
private static final int ROWS = 3;
private static final int COLUMNS = 3;

/**
* Build an empty tic-tac-toe board
*/
public TicTacToe() {
board = new char[ROWS][COLUMNS];

// fill board with spaces
for ( int i = 0; i < ROWS; i++ ) {
for ( int j = 0; j < COLUMNS; j++ ) {
board[i][j] = ' ';
}
}
}

/**
* Put an X or an O on the board at position i,j
*
* @param i The row number
* @param j The column number
* @param player the current player (either X or O)
*
* @return true if the player made a mark at position i,j
* false if that position already contained a mark
*/
public boolean set( int i, int j, char player ) {
if ( ( i < 0 ) || ( i > 2 ) || ( j < 0 ) || ( j > 2 ) )
return false;
if ( board[i][j] != ' ' )
return false;

board[i][j] = player;
return true;
}

/**
* Evaluate the board to determine a winner
*
* @return 'x' if X is the winner, 'o' if O is the winner, ' ' if no one
* is the winner.
*/
public char getWinner()
{
int Xrow = 0;
int Orow = 0;
int Xcol = 0;
int Ocol = 0;
for ( int row = 0; row < 3; row++ ) {
for ( int col = 0; col < 3; col++ ) {
if ( board[row][col] == 'X' )
Xrow += 1;
if ( board[row][col] == 'O' )
Orow += 1;
}
}

for ( int col = 0; col < 3; col++){
for ( int row = 0; row < 3; row++){
if ( board[row][col] == 'X' )
Xcol += 1;
if ( board[row][col] == 'O' )
Ocol += 1;
}
}
if ( (Xrow > 3) || (Xcol > 3) )
return 'x';
if ( (Ocol > 3) || (Ocol > 3) )
return 'o';
if ( (board[0][0] == 'X') && (board[1][1] == 'X') && (board[2][2] == 'X') )
return 'x';
if ( (board[0][0] == 'O') && (board[1][1] == 'O') && (board[2][2] == 'O') )
return 'o';
if ( (board[0][2] == 'X') && (board[1][1] == 'X') && (board[2][0] == 'X') )
return 'x';
if ( (board[0][2] == 'O') && (board[1][1] == 'O') && (board[2][0] == 'O') )
return 'o';
else {
return ' ';
}// no one has won
}

/**
* Return a String representation of the board
*
* @return The current board represented as a String
*/
public String toString() {
String s = "";
for ( int i = 0; i < ROWS; i++ ) {
s += "|";
for ( int j = 0; j < COLUMNS; j++ ) {
s += board[i][j];
}
s += "|\n";
}
return s;
}
}

If you need to view the board class.. here it is..
this uses the tictactoe class..

import javax.swing.*;

/**
* Play tic-tac-toe.
*
* Game derived from Big Java, by Cay Horstmann, pages 545-547.
*
* @author Cay Horstmann
*
* @version 1.0
*/
public class TicTacToeGame {

private TicTacToe game;

/**
* Play a game of tic-tac-toe
*/
public TicTacToeGame()
{
game = new TicTacToe();
int numMoves = 0;

char player = 'x';
while ( numMoves < 9 ) {
// display board
System.out.println( game );

makeMove( player );
numMoves++;
player = switchPlayer( player );

}

System.out.println( game );
System.exit(0);
}


/**
* Let a player make a move. Ask the player for the row and column
* position where he wishes to put his mark, and then place the mark
* at that position on the board.
*
* @param player The player whose turn it is.
*/
private void makeMove( char player )
{
boolean goodMove = false;
while( goodMove == false ) {
int row = getRow( player );
int column = getColumn( player );

// try to place an X or O at that position

goodMove = game.set( row, column, player );
}
}

/**
* Switch from 'x' to 'o' or vice versa
*
* @param player The current player
* @return The new player
*/
private char switchPlayer( char player )
{
if ( player == 'x' )
return 'o';
else
return 'x';
}

/**
* Get a row number for where the given player wants to place a mark
*
* @param player the player who wants to place a mark
* @return the row number of the row where the player wants to put a mark
*/
private int getRow( char player )
{
String input =
JOptionPane.showInputDialog("Enter row for '" + player + "'" );
if ( input == null || input.equals("") )
System.exit( 0 );
return Integer.parseInt( input );
}

/**
* Get a column number for where the given player wants to place a mark
*
* @param player the player who wants to place a mark
* @return the column number of the row where the player wants to put a mark
*/
private int getColumn( char player )
{
String input =
JOptionPane.showInputDialog("Enter column for '" + player + "'" );
if ( input == null || input.equals("") )
System.exit( 0 );
return Integer.parseInt( input );
}

}

jtxay
Newbie Poster
11 posts since Dec 2004
Reputation Points: 10
Solved Threads: 0
 

Hello there, I am having problems with this code i have written and it is a tic tac toe program. It runs and everything but it doesn't get a winner when i call the method getWinner. this method is suppose to return 'x', 'o' , or ' ' depending onwhether X, O or no one is the winner. Oh yeah a player wins only if they have three-in-a-row, in a row, a column, or a diagonal.. ?? I am just stuck on what to do.. i need your advice or something.. Oh yeah i'm using BlueJay.. thanks ..

JT ....

/** * A class that represents a tic-tac-toe board * * * @author J T ... */ public class TicTacToe { private char[][] board; private static final int ROWS = 3; private static final int COLUMNS = 3;

/** * Build an empty tic-tac-toe board */ public TicTacToe() { board = new char[ROWS][COLUMNS];

// fill board with spaces for ( int i = 0; i < ROWS; i++ ) { for ( int j = 0; j < COLUMNS; j++ ) { board[i][j] = ' '; } } }

/** * Put an X or an O on the board at position i,j * * @param i The row number * @param j The column number * @param player the current player (either X or O) * * @return true if the player made a mark at position i,j * false if that position already contained a mark */ public boolean set( int i, int j, char player ) { if ( ( i < 0 ) || ( i > 2 ) || ( j < 0 ) || ( j > 2 ) ) return false; if ( board[i][j] != ' ' ) return false;

board[i][j] = player; return true; } /** * Evaluate the board to determine a winner * * @return 'x' if X is the winner, 'o' if O is the winner, ' ' if no one * is the winner. */ public char getWinner() { int Xrow = 0; int Orow = 0; int Xcol = 0; int Ocol = 0; for ( int row = 0; row < 3; row++ ) { for ( int col = 0; col < 3; col++ ) { if ( board[row][col] == 'X' ) Xrow += 1; if ( board[row][col] == 'O' ) Orow += 1; } } for ( int col = 0; col < 3; col++){ for ( int row = 0; row < 3; row++){ if ( board[row][col] == 'X' ) Xcol += 1; if ( board[row][col] == 'O' ) Ocol += 1; } } if ( (Xrow > 3) || (Xcol > 3) ) return 'x'; if ( (Ocol > 3) || (Ocol > 3) ) return 'o'; if ( (board[0][0] == 'X') && (board[1][1] == 'X') && (board[2][2] == 'X') ) return 'x'; if ( (board[0][0] == 'O') && (board[1][1] == 'O') && (board[2][2] == 'O') ) return 'o'; if ( (board[0][2] == 'X') && (board[1][1] == 'X') && (board[2][0] == 'X') ) return 'x'; if ( (board[0][2] == 'O') && (board[1][1] == 'O') && (board[2][0] == 'O') ) return 'o'; else { return ' '; }// no one has won }

/** * Return a String representation of the board * * @return The current board represented as a String */ public String toString() { String s = ""; for ( int i = 0; i < ROWS; i++ ) { s += "|"; for ( int j = 0; j < COLUMNS; j++ ) { s += board[i][j]; } s += "|\n"; } return s; } }

If you need to view the board class.. here it is.. this uses the tictactoe class..

import javax.swing.*;

/** * Play tic-tac-toe. * * Game derived from Big Java, by Cay Horstmann, pages 545-547. * * @author Cay Horstmann * * @version 1.0 */ public class TicTacToeGame {

private TicTacToe game; /** * Play a game of tic-tac-toe */ public TicTacToeGame() { game = new TicTacToe(); int numMoves = 0;

char player = 'x'; while ( numMoves < 9 ) { // display board System.out.println( game );

makeMove( player ); numMoves++; player = switchPlayer( player ); }

System.out.println( game ); System.exit(0); } /** * Let a player make a move. Ask the player for the row and column * position where he wishes to put his mark, and then place the mark * at that position on the board. * * @param player The player whose turn it is. */ private void makeMove( char player ) { boolean goodMove = false; while( goodMove == false ) { int row = getRow( player ); int column = getColumn( player );

// try to place an X or O at that position goodMove = game.set( row, column, player ); } } /** * Switch from 'x' to 'o' or vice versa * * @param player The current player * @return The new player */ private char switchPlayer( char player ) { if ( player == 'x' ) return 'o'; else return 'x'; } /** * Get a row number for where the given player wants to place a mark * * @param player the player who wants to place a mark * @return the row number of the row where the player wants to put a mark */ private int getRow( char player ) { String input = JOptionPane.showInputDialog("Enter row for '" + player + "'" ); if ( input == null || input.equals("") ) System.exit( 0 ); return Integer.parseInt( input ); }

/** * Get a column number for where the given player wants to place a mark * * @param player the player who wants to place a mark * @return the column number of the row where the player wants to put a mark */ private int getColumn( char player ) { String input = JOptionPane.showInputDialog("Enter column for '" + player + "'" ); if ( input == null || input.equals("") ) System.exit( 0 ); return Integer.parseInt( input ); } }


Maybe you should test lowercase letters instead of uppercase?

server_crash
Postaholic
2,111 posts since Jun 2004
Reputation Points: 113
Solved Threads: 20
 

This article has been dead for over three months

Post: Markdown Syntax: Formatting Help
You