[ Ajuda ] Opinião sobre código && Diminuir quantidade de linhas de código

Olá, eu fiz este código que é basicamente um jogo da velha, ou do galo…
Peço a opinião aos mais experientes para me dares opinião em relação a organização do código.
Sei que existia a possibilidade de criar métodos para organizar melhor o código, porem ainda não aprendi como utilizar tal ferramenta.
Sei que cada um escreve o código da maneira que prefere, porém peço mesmo assim para vocês me darem um feedback sobre isto pois no futuro irei trabalhar em equipe e quero que o meu código seja um código legível para todos os envolvidos.

Por fim…Se possível, gostaria de saber se alguma parte deste codigo poderia ser reduzida.

/**
     *
     * @author Gustavo
     */
    package jogodogalo1p;

    import java.util.Random;
    import java.util.Scanner;

    public class JogoDoGalo1P {

        public static void main(String[] args) {
            /*lX, CX, DX = Linha, Coluna e Diagonal.
            /*N = Número de rodadas.
            /*Posi = Posição que o jogador irá dar.
            /*NomeX = nome dos jogadores.
            /*Simb = Simbolo.
            /*Resp = Resposta sobre continuar ou parar o jogo.
             */
            //- Declaração das variaveis. -----------------------------------------||
            Scanner scan = new Scanner(System.in);
            Scanner menu = new Scanner(System.in);
            Random random = new Random();
            String nome1, simb = "X", l1, l2, l3, c1, c2, c3, d1, d2;
            int posi = 1, n = 0, resp, posiBKP;

            String pos[][] = new String[3][3];
            pos[0][0] = "7";
            pos[0][1] = "8";
            pos[0][2] = "9";

            pos[1][0] = "4";
            pos[1][1] = "5";
            pos[1][2] = "6";

            pos[2][0] = "1";
            pos[2][1] = "2";
            pos[2][2] = "3";

            //- Inicio. -----------------------------------------------------------||
            System.out.println("-----------------------------");
            System.out.println("\tJogo do Galo.");
            System.out.println("-----------------------------\n");
            System.out.println(" 1 - Iniciar o jogo.");
            System.out.println(" 2 - Sair do jogo.");
            System.out.println("\n-----------------------------");
            System.out.print("    O que deseja fazer: ");
            resp = menu.nextInt();

            if (resp == 2) {
                while (resp == 2) {

                    break;

                }
            }
            if (resp == 1) {

                System.out.println("\n\n-----------------------------");
                System.out.println("\tIniciar o jogo\n");
                System.out.print(" - Introduza o seu nome: ");
                nome1 = scan.nextLine();
                System.out.println("    Você irá iniciar com 'X'.");
                System.out.println("\n----------------------------------");

                System.out.println("\n\t" + pos[0][0] + "\t" + pos[0][1] + "\t" + pos[0][2]);
                System.out.println("\n\t" + pos[1][0] + "\t" + pos[1][1] + "\t" + pos[1][2]);
                System.out.println("\n\t" + pos[2][0] + "\t" + pos[2][1] + "\t" + pos[2][2]);

                while (n < 9) {

                    //- Sistema para verificar quem ganhou. -----------------------||
                    l1 = pos[0][0] + pos[0][1] + pos[0][2];
                    l2 = pos[1][0] + pos[1][1] + pos[1][2];
                    l3 = pos[2][0] + pos[2][1] + pos[2][2];

                    c1 = pos[0][0] + pos[1][0] + pos[2][0];
                    c2 = pos[0][1] + pos[1][1] + pos[2][1];
                    c3 = pos[0][2] + pos[1][2] + pos[2][2];

                    d1 = pos[0][2] + pos[1][1] + pos[2][0];
                    d2 = pos[0][0] + pos[1][1] + pos[2][2];
                    if (l1.equals("XXX") || l2.equals("XXX") || l3.equals("XXX") || c1.equals("XXX") || c2.equals("XXX") || c3.equals("XXX") || d1.equals("XXX") || d2.equals("XXX")) {

                        System.out.println("\n\tO/A " + nome1 + " ganhou!");
                        break;

                    }
                    if (l1.equals("OOO") || l2.equals("OOO") || l3.equals("OOO") || c1.equals("OOO") || c2.equals("OOO") || c3.equals("OOO") || d1.equals("OOO") || d2.equals("OOO")) {

                        System.out.println("\n\tO computador ganhou!");
                        break;

                    }

                    //- Questão de determinação de jogada. ------------------------||
                    if (n % 2 != 0) {

                        posiBKP = random.nextInt(2);
                        while (posiBKP == posi) {

                            posiBKP = random.nextInt(2);

                        }
                        posi = posiBKP;
                        simb = "O";
                        System.out.println("\n       O computador jogou na " + posi + "º.");

                    }
                    if (n % 2 == 0) {

                        System.out.print("\n       Onde deseja jogar?");
                        posi = scan.nextInt();
                        simb = "X";

                    }
                    if (n == 9) {

                        System.out.println("Decorreu um empate!");
                        break;

                    }
                    //- Determinar onde colocar o símbolo -------------------------||
                    if (posi == 1 && (pos[2][0].equals("1"))) {
                        pos[2][0] = simb;
                        n++;
                        System.out.println("\n\t-------------------");
                        System.out.println("\t  Ronda número " + n + "\n");
                        System.out.println("\n\t" + pos[0][0] + "\t" + pos[0][1] + "\t" + pos[0][2]);
                        System.out.println("\n\t" + pos[1][0] + "\t" + pos[1][1] + "\t" + pos[1][2]);
                        System.out.println("\n\t" + pos[2][0] + "\t" + pos[2][1] + "\t" + pos[2][2]);
                        continue;
                    }
                    if (posi == 2 && (pos[2][1].equals("2"))) {
                        pos[2][1] = simb;
                        n++;
                        System.out.println("\n\t-------------------\n");
                        System.out.println("\t  Ronda número " + n + "\n");
                        System.out.println("\n\t" + pos[0][0] + "\t" + pos[0][1] + "\t" + pos[0][2]);
                        System.out.println("\n\t" + pos[1][0] + "\t" + pos[1][1] + "\t" + pos[1][2]);
                        System.out.println("\n\t" + pos[2][0] + "\t" + pos[2][1] + "\t" + pos[2][2]);
                        continue;
                    }
                    if (posi == 3 && (pos[2][2].equals("3"))) {
                        pos[2][2] = simb;
                        n++;
                        System.out.println("\n\t-------------------\n");
                        System.out.println("\t  Ronda número " + n + "\n");
                        System.out.println("\n\t" + pos[0][0] + "\t" + pos[0][1] + "\t" + pos[0][2]);
                        System.out.println("\n\t" + pos[1][0] + "\t" + pos[1][1] + "\t" + pos[1][2]);
                        System.out.println("\n\t" + pos[2][0] + "\t" + pos[2][1] + "\t" + pos[2][2]);
                        continue;
                    }
                    if (posi == 4 && (pos[1][0].equals("4"))) {
                        pos[1][0] = simb;
                        n++;
                        System.out.println("\n\t-------------------\n");
                        System.out.println("\t  Ronda número " + n + "\n");
                        System.out.println("\n\t" + pos[0][0] + "\t" + pos[0][1] + "\t" + pos[0][2]);
                        System.out.println("\n\t" + pos[1][0] + "\t" + pos[1][1] + "\t" + pos[1][2]);
                        System.out.println("\n\t" + pos[2][0] + "\t" + pos[2][1] + "\t" + pos[2][2]);
                        continue;

                    }
                    if (posi == 5 && (pos[1][1].equals("5"))) {
                        pos[1][1] = simb;
                        n++;
                        System.out.println("\n\t-------------------\n");
                        System.out.println("\t  Ronda número " + n + "\n");
                        System.out.println("\n\t" + pos[0][0] + "\t" + pos[0][1] + "\t" + pos[0][2]);
                        System.out.println("\n\t" + pos[1][0] + "\t" + pos[1][1] + "\t" + pos[1][2]);
                        System.out.println("\n\t" + pos[2][0] + "\t" + pos[2][1] + "\t" + pos[2][2]);
                        continue;
                    }
                    if (posi == 6 && (pos[1][2].equals("6"))) {
                        pos[1][2] = simb;
                        n++;
                        System.out.println("\n\t-------------------\n");
                        System.out.println("\t  Ronda número " + n + "\n");
                        System.out.println("\n\t" + pos[0][0] + "\t" + pos[0][1] + "\t" + pos[0][2]);
                        System.out.println("\n\t" + pos[1][0] + "\t" + pos[1][1] + "\t" + pos[1][2]);
                        System.out.println("\n\t" + pos[2][0] + "\t" + pos[2][1] + "\t" + pos[2][2]);

                        continue;
                    }
                    if (posi == 7 && (pos[0][0].equals("7"))) {
                        pos[0][0] = simb;
                        n++;
                        System.out.println("\n\t-------------------\n");
                        System.out.println("\t  Ronda número " + n + "\n");
                        System.out.println("\n\t" + pos[0][0] + "\t" + pos[0][1] + "\t" + pos[0][2]);
                        System.out.println("\n\t" + pos[1][0] + "\t" + pos[1][1] + "\t" + pos[1][2]);
                        System.out.println("\n\t" + pos[2][0] + "\t" + pos[2][1] + "\t" + pos[2][2]);
                        continue;
                    }
                    if (posi == 8 && (pos[0][1].equals("8"))) {
                        pos[0][1] = simb;
                        n++;
                        System.out.println("\n\t-------------------\n");
                        System.out.println("\t  Ronda número " + n + "\n");
                        System.out.println("\n\t" + pos[0][0] + "\t" + pos[0][1] + "\t" + pos[0][2]);
                        System.out.println("\n\t" + pos[1][0] + "\t" + pos[1][1] + "\t" + pos[1][2]);
                        System.out.println("\n\t" + pos[2][0] + "\t" + pos[2][1] + "\t" + pos[2][2]);
                        continue;
                    }
                    if (posi == 9 && (pos[0][2].equals("9"))) {
                        pos[0][2] = simb;
                        n++;
                        System.out.println("\n\t-------------------\n");
                        System.out.println("\t  Ronda número " + n + "\n");
                        System.out.println("\n\t" + pos[0][0] + "\t" + pos[0][1] + "\t" + pos[0][2]);
                        System.out.println("\n\t" + pos[1][0] + "\t" + pos[1][1] + "\t" + pos[1][2]);
                        System.out.println("\n\t" + pos[2][0] + "\t" + pos[2][1] + "\t" + pos[2][2]);
                        continue;

                    } //- Verifica se a posição está ocupada. ---------------------------||
                    else {
                        if (n % 2 == 0) {

                            System.out.println("\n A " + posi + "º posição já está ocupada.\n Por favor, introduza outra posição.");

                        }
                    }
                }
            }
        }
    }

Tem muitos IF’s.
Precisa melhorar o código em relação à programação orientada a objetos.
Crie as classe e métodos em arquivos separados, definindo o que cada classe deve fazer (Ex.: classe de interface com usuário separada da classe com as regras do jogo).
A redução/otimização do código ocorre naturalmente quando perceber que está gerando códigos repetidos para a mesma coisa e praticando.