Search code examples
javaloopsrefactoring

Reverse loop TicTacToe


I've got loop:

for (int i = 0; i<3; i++){
  System.out.println(i);
}

output:
0
1
2

I need to reverse this loop to output:

2
1
0

I need it because I work on TicTacToe Java game.

Here is my code for check win:

 static boolean checkWin(char dot) {
        for (int i = 0; i < map.length; i++) {
            for (int j = 0; j < map[i].length; j++) {
                if (map[0][i] == dot && i == 2) {
                    return true;
                }
                if (map[1][i] == dot && i == 2) {
                    return true;
                }

                if (map[2][i] == dot && i == 2) {
                    return true;
                }
                if (map[i][0] == dot && i == 2) {
                    return true;
                }
                if (map[i][1] == dot && i == 2) {
                    return true;
                }
                if (map[i][2] == dot && i == 2) {
                    return true;
                }
                if (map[i][i] == dot && i == 2) {
                    return true;
                }
                if (map[i][0] == dot && i == 2) {
                    return true;
                }
            }

        }
        return false;
    }

last thing that I need to refactor this method:

  static boolean checkWin(char dot) {
        if (map[0][0] == dot && map[0][1] == dot && map[0][2] == dot) {
            return true;
        }
        if (map[1][0] == dot && map[1][1] == dot && map[1][2] == dot) {
            return true;
        }
        if (map[2][0] == dot && map[2][1] == dot && map[2][2] == dot) {
            return true;
        }

        if (map[0][0] == dot && map[1][0] == dot && map[2][0] == dot) {
            return true;
        }
        if (map[0][1] == dot && map[1][1] == dot && map[2][1] == dot) {
            return true;
        }
        if (map[0][2] == dot && map[1][2] == dot && map[2][2] == dot) {
            return true;
        }

        if (map[0][0] == dot && map[1][1] == dot && map[2][2] == dot) {
            return true;
        }
        if (map[0][2] == dot && map[1][1] == dot && map[2][0] == dot) {
            return true;
        }

        return false;
    }
}

I almost done it.

Last thing that i need refactor this part of code:

if (map[0][2] == dot && map[1][1] == dot && map[2][0] == dot) {
   return true;
}

to something like

  if (map[i][0] == dot && i == 2) {
          return true;
    }

Main question is here:

for (int i = 0; i<3; i++){
  System.out.println(i);
}

output:
0
1
2

I need to reverse this loop to output:

2
1
0

to feel this last part:

  if (map[i][0] == dot && i == 2) {
          return true;
 }

i need to feel this last condition with values 2 1 0

  if (map[i][insert here] == dot && i == 2) {
          return true;
 }

Please Help.


Solution

  • If all you want to do is reverse the loop output, you can just invert what you're doing in the for loop

    for (int i = 2; i>=0; i--){
            System.out.println(i);
        }
    
    output:
    2
    1
    0
    

    As a quick example.