Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • Home
  • SEARCH
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 8969667
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: June 15, 20262026-06-15T17:37:30+00:00 2026-06-15T17:37:30+00:00

I know my code is a little messy but I will try to be

  • 0

I know my code is a little messy but I will try to be as detailed as possible. The code is creating a TicTacToe game. I am using an array to create the game board which is the gameBoard(). The user is always X while the computer is always O. I’ve created if statements for the user input and the computer input, the difference is, the computer gets its number from java.util.Random. The if statements grab the user’s input and prints an X on the board where designated, same with the computer. The problem here is when the random generator chooses a space where an X is already present, it overlaps and vice versa. I need the program to secretly tell the computer to generate another random number. If you can help it would be great. Sorry for the big description.

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.Random;

public class TicTacToeGame {

static String arrayPicture[][]; //Array is universal so we can include it into any method
static int userInput;
static boolean validInput = false;
static String name;

public static void main (String[] args) throws IOException {

    System.out.println ("Please enter your name:");
    name = gameStart("");

    arrayPicture = new String [13][13];

    for (int i = 0; i < 13; i ++) {

        for (int j = 0; j < 13; j  ++) {
            arrayPicture [i][j] = " "; //Print spaces into the array
        }   
    }       

    while (validInput == false) {

        validX();

        cpuPlacement();

        System.out.println ("Computer, please enter your number");
        validInput = false;
    }       
}//main

public static void verticalLine (int x1, int y1, int x2) {

    for (int k = x1; k < x2; k ++) {
        arrayPicture [y1][k] = "|"; //if y1 and k are present, print a vertical line in the array
    }       
}//verticalLine

public static void horizontalLine (int x1, int y1, int x2) {
    for (int k = x1; k < x2; k ++) {
        arrayPicture [y1][k] = "-"; //if y1 and k are present, print a dash in the array
    }       
}//horizontalLine

public static void printArray () {
    for (int i = 0; i < 13; i ++) {

        for (int j = 0; j < 13; j ++) {
            System.out.print (arrayPicture[i][j]);
        }   
        System.out.println();
    }       
}//printArray

public static String gameStart (String input) throws IOException { 

        boolean validInput = false;

        BufferedReader userInput = new BufferedReader (new InputStreamReader(System.in));

        while (validInput == false) {
            input = userInput.readLine();
            validInput = true;

                System.out.println ("The name of the game is TicTacToe, you will always be the letter X.");
                System.out.println ("Please choose the coordinates you wish. The coordinates are where your X will be placed on the game board.");

        }
        return input;
}

public static void validX () throws IOException {

    gameBoard();

    String input = null;

    System.out.println (name + ", please enter your number");

        try {
            BufferedReader columnNumber = new BufferedReader (new InputStreamReader(System.in));//BufferedReader variable where the user will input their answer
            input = columnNumber.readLine();
            userInput = Integer.parseInt (input);
            validInput = true;
            userPlacement();
            //If an exception is present, the try sends it to catch.
            //Ex. If the user in\puts "bob has a cat" the try will find an exception and immediately send it to the catch statement
        }
            catch (NumberFormatException ex) {
            System.out.println ("Invalid input, please enter a number.");
            validInput = false;
        }

        if (userInput == 1) {
            userInputX (2, 2, 3);
        }
        else if (userInput == 2) {
            userInputX (6, 2, 7);
        }
        else if (userInput == 3) {
            userInputX (10, 2, 11);
        }
        else if (userInput == 4) {
            userInputX (2, 6, 3);
        }
        else if (userInput == 5) {
            userInputX (6, 6, 7);
        }
        else if (userInput == 6) {
            userInputX (10, 6, 11);
        }
        else if (userInput == 7) {
            userInputX (2, 10, 3);
        }
        else if (userInput == 8) {
            userInputX (6, 10, 7);
        }                               
        else if (userInput == 9) {
            userInputX (10, 10, 11);
        }
}

public static void cpuinputO (int x1, int y1, int x2) throws IOException {

    gameBoard();

    for (int k = x1; k < x2; k ++) {
        arrayPicture [y1][k] = "O"; //if y1 and k are present, print a dash in the array
    }
}

public static void userInputX (int x1, int y1, int x2) {

    for (int k = x1; k < x2; k ++) {
        arrayPicture [y1][k] = "X"; //if y1 and k are present, print a dash in the array
    }
}

public static void userPlacement () throws IOException {

    if (userInput == 1) {
        userInputX (2, 2, 3);
    }
    else if (userInput == 2) {
        userInputX (6, 2, 7);
    }
    else if (userInput == 3) {
        userInputX (10, 2, 11);
    }
    else if (userInput == 4) {
        userInputX (2, 6, 3);
    }
    else if (userInput == 5) {
        userInputX (6, 6, 7);
    }
    else if (userInput == 6) {
        userInputX (10, 6, 11);
    }
    else if (userInput == 7) {
        userInputX (2, 10, 3);
    }
    else if (userInput == 8) {
        userInputX (6, 10, 7);
    }                               
    else if (userInput == 9) {
        userInputX (10, 10, 11);
    }
}

public static void cpuPlacement () throws IOException {

    Random random = new Random();
    int cpuCoordinates = random.nextInt(10);
    System.out.println (cpuCoordinates);
    boolean validInput0 = false;

    if (validInput0 == true) {

        if (cpuCoordinates < 1) {
            validInput0 = false;
        }
    }
    else if (cpuCoordinates == 1) {
        cpuinputO (2, 2, 3);
    }
    else if (cpuCoordinates == 2) {
        cpuinputO (6, 2, 7);
    }
    else if (cpuCoordinates == 3) {
        cpuinputO (10, 2, 11);
    }
    else if (cpuCoordinates == 4) {
        cpuinputO (2, 6, 3);
    }
    else if (cpuCoordinates == 5) {
        cpuinputO (6, 6, 7);
    }
    else if (cpuCoordinates == 6) {
        cpuinputO (10, 6, 11);
    }
    else if (cpuCoordinates == 7) {
        cpuinputO (2, 10, 3);
    }
    else if (cpuCoordinates == 8) {
        cpuinputO (6, 10, 7);
    }                               
    else if (cpuCoordinates == 9) {
        cpuinputO (10, 10, 11);
    }
}

public static void gameBoard () throws IOException {
    System.out.println (" ");
    horizontalLine (1, 0, 4);  horizontalLine (5, 0, 8);  horizontalLine (9, 0, 12);
    verticalLine (0, 1, 1);  verticalLine (4, 1, 5);  verticalLine (8, 1, 9);  verticalLine (12, 1, 13);
    verticalLine (0, 2, 1);  verticalLine (4, 2, 5);  verticalLine (8, 2, 9);  verticalLine (12, 2, 13);
    verticalLine (0, 3, 1);  verticalLine (4, 3, 5);  verticalLine (8, 3, 9);  verticalLine (12, 3, 13);
    horizontalLine (1, 4, 4);  horizontalLine (5, 4, 8);  horizontalLine (9, 4, 12);
    verticalLine (0, 5, 1);  verticalLine (4, 5, 5);  verticalLine (8, 5, 9);  verticalLine (12, 5, 13);
    verticalLine (0, 6, 1);  verticalLine (4, 6, 5);  verticalLine (8, 6, 9);  verticalLine (12, 6, 13);
    verticalLine (0, 7, 1);  verticalLine (4, 7, 5);  verticalLine (8, 7, 9);  verticalLine (12, 7, 13);
    horizontalLine (1, 8, 4);  horizontalLine (5, 8, 8);  horizontalLine (9, 8, 12);
    verticalLine (0, 9, 1);  verticalLine (4, 9, 5);  verticalLine (8, 9, 9);  verticalLine (12, 9, 13);
    verticalLine (0, 10, 1); verticalLine (4, 10, 5);  verticalLine (8, 10, 9);  verticalLine (12, 10, 13);
    verticalLine (0, 11, 1); verticalLine (4, 11, 5);  verticalLine (8, 11, 9);  verticalLine (12, 11, 13);
    horizontalLine (1, 12, 4);  horizontalLine (5, 12, 8);  horizontalLine (9, 12, 12);
    printArray ();

 }//gameBoard
}//public class
  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-06-15T17:37:30+00:00Added an answer on June 15, 2026 at 5:37 pm

    I’m not quite sure what’s going on in your code (why are you cycling through a 13-by-13 array for Tic-Tac-Toe?) but this should be an easy fix. The simplest fix would be to add a while loop around your CPU placement code instead of your current if/else-if statement. (The if/else-ifs should be inside the while loop.) When a valid placement is found,

    while(validInput0==false){
        if(cpuCoordinates == 1){
            if(squareOneOwner == null){
                squareOneOwner = "CPU"
                validInput0 = true;
            }
        }else if(...){
            ...
        }
        if(validInput0 == false){
            cpuCoordinates = random.nextInt(10);
        }
    }
    

    etc. This lets you check whether the square the computer is aiming for and only claim it if it’s currently empty. It requires some changes elsewhere, but they’re simple enough. The last if statement will reroll for the next cycle if the previous attempt was invalid.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I know the code is missing (Someone will give negative numbers). But I only
I've written a little JS code to change the classname on hover. I know
The code here is X++. I know very little about it, though I am
I know inline code is preferable, but there's a bunch of code that's needed
I would like to know what code to use to convert a double[] array
So, this might be a little bit messy for me to explain, but here
Working in python 2.7. I'm sure the code is a little unwieldy, but I'll
I have little knowledge with the iPhone SKD (don't even know what code it
I know little about sockets but so far I haven't had much of a
I've got a BadImageFormatException error in this little code below. I know it isn't

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.