Erro para dar tiro na batalha naval

alguém pode me ajudar com esse erro?


import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Objects;
import java.util.Random;
import java.util.Scanner;

public class BatalhaNavaldnv {

    public static int linha;
    public static int coluna;

    public static final int TAMANHO_DO_BARCO = 3;
    public static final int QUANTIDADE_MAXIMA_DE_BARCOS = 3;
    public static final int TAMANHO_TABULEIRO = 5;

    public static String[][] gabaritoPlayer1 = new String[TAMANHO_TABULEIRO][TAMANHO_TABULEIRO];
    public static String[][] gabaritoPlayer2 = new String[TAMANHO_TABULEIRO][TAMANHO_TABULEIRO];
    public static String[][] tabuleiro1 = new String[TAMANHO_TABULEIRO][TAMANHO_TABULEIRO];
    public static String[][] tabuleiro2 = new String[TAMANHO_TABULEIRO][TAMANHO_TABULEIRO];
    public static char [][] navio;

    public static void main(String[] args) {
            inicioDeJogo();
            executaJogada(tabuleiro1);
            executaJogada(tabuleiro2);
    }

    public static void inicializaTabuleiro() {
        System.out.println("O tabuleiro esta sendo criado. Aguarde um instante. ");
        for (int i = 0; i < TAMANHO_TABULEIRO; i++) {
            Arrays.fill(tabuleiro1[i], " . ");
            Arrays.fill(tabuleiro2[i], " . ");
        }
        posicaoDosBarcos();
    }

    public static void posicaoDosBarcos() {
        Random rand = new Random();
        for (int quantidadeDeBarcos = 0; quantidadeDeBarcos < QUANTIDADE_MAXIMA_DE_BARCOS; ) {
            int posicaoI = rand.nextInt(TAMANHO_TABULEIRO);
            int posicaoJ = rand.nextInt((TAMANHO_TABULEIRO - TAMANHO_DO_BARCO));
            if (inserirBarco(posicaoI, posicaoJ)) {
                quantidadeDeBarcos++;
            }
        }
    }

    public static boolean inserirBarco(int i, int j) {
        if (!temBarcoNaLinha(i, j)) {
            int k;
            for (k = j; k < (j + TAMANHO_DO_BARCO); k++) {
                tabuleiro1[i][k]= " # ";
                tabuleiro2[i][k]= " # ";
            }
            return true;
        }
        return false;
    }
    public static boolean temBarcoNaLinha(int i, int j) {
        return contarPartesDoBarcoNaLinha(i, j, "#") != 0;
    }

    public static int contarPartesDoBarcoNaLinha(int i, int j, String symbol) {
        int contarBarcos = 0;
        for (int k = j; k < (j + TAMANHO_DO_BARCO); k++) {
            if (tabuleiro1[i][k] == symbol) contarBarcos++;
            if (tabuleiro2[i][k] == symbol) contarBarcos++;
        }
        return contarBarcos;
    }

    public static void inicioDeJogo() {
        System.out.println("\n------Bem Vindo a Batalha Naval Para 2 Jogadores------");
        Scanner ler = new Scanner(System.in);
        System.out.print("Digite o nome do jogador 1: ");
        String jogador1 = ler.nextLine();
        System.out.print("Digite o nome do jogador 2: ");
        String jogador2 = ler.nextLine();

        for (int i = 0; i < 10; i++) {
            if (i % 2 == 0) {
                System.out.println("\n== Vez do jogador " + jogador1 + " ==");
                executaJogada(tabuleiro1);
            }else{
                System.out.println("\n== Vez do jogador " + jogador2 + " ==");
               executaJogada(tabuleiro2);
            }
            System.out.println();

           mostraTabuleiro();

            if (verificaPosicao()) {
                if (i % 2 == 0) {
                    System.out.println("Jogador1 Ganhou!");
                    break;
                } else {
                    System.out.println("Jogador2 Ganhou!");
                }
            } else if (i == 5) {
                System.out.println("Fim de jogo, nao houve ganhadores");
            }
        }
    }
    public static void executaJogada(String[][] tabuleiro1) {
        inicializaTabuleiro();
        //inserirBarco();
        mostraGabarito();
        mostraTabuleiro();
        lerLinha();
        lerColuna();
    }
    public static int lerLinha() {
        BufferedReader entrada = new BufferedReader(new InputStreamReader(System.in));
        try {
            System.out.print("Informe a linha: ");
            linha = Integer.parseInt(entrada.readLine());
            if (linha >= 0 && linha <= 6) {
                return (linha);
            } else {
                System.out.println("Linha invalida!!!");
                return (lerLinha());
            }
        } catch (Exception e) {
            System.out.println("Linha invalida!!!");
            return (lerLinha());
        }
    }
    public static int lerColuna() {
        BufferedReader entrada = new BufferedReader(new InputStreamReader(System.in));
        try {
            System.out.print("Informe a coluna: ");
            coluna = Integer.parseInt(entrada.readLine());
            if (coluna >= 0 && coluna <= 6) {
                return (coluna);
            } else {
                System.out.println("Coluna invalida!");
                return (lerColuna());
            }
        } catch (Exception e) {
            System.out.println("Coluna invalida!");
            return (lerColuna());
        }
    }
     public static void mostraGabarito(){
        for(int i = 0; i < TAMANHO_TABULEIRO; i++){
            for(int j = 0; j < TAMANHO_TABULEIRO; j++){
                System.out.print(tabuleiro1[i][j]);
            }
            System.out.print("             ");
            for(int j = 0; j < TAMANHO_TABULEIRO;j++){
                System.out.print(tabuleiro2[i][j]);
            }
            System.out.println();
        }
     }
     public static void mostraTabuleiro(){
         System.out.println();
         System.out.print(" ");
        for(int i = 0; i < TAMANHO_TABULEIRO; i++){
            System.out.print("  " + (i+1));
        }
         System.out.print("        ");
         for(int i = 0; i < TAMANHO_TABULEIRO; i++){
             System.out.print("  " + (i+1));
         }
         System.out.println();

         for(int i = 0; i < TAMANHO_TABULEIRO; i++){
             System.out.print((i+1)+"|");
             for(int j = 0; j < TAMANHO_TABULEIRO; j++){
                 System.out.print(tabuleiro1[i][j]);
             }
             System.out.print("      ");
             System.out.print((i+1)+"|");
             for(int j = 0; j < TAMANHO_TABULEIRO;j++){
                 System.out.print(tabuleiro2[i][j]);
             }
             System.out.println();
         }
         System.out.println();
     }
    public static boolean verificaPosicao() {
        int quantPartesNavios = QUANTIDADE_MAXIMA_DE_BARCOS * TAMANHO_DO_BARCO;
        while (quantPartesNavios > 0) {
            int lin = lerLinha();
            int col = lerColuna();
            if (Objects.equals(tabuleiro1[lin][col], " 3 ")) {
                if (Objects.equals(tabuleiro2[lin][col], " 3 ")){
                System.out.println("~~~~");
                System.out.println("Voce atirou na agua, tente novamente!");
                System.out.println("~~~~");
                gabaritoPlayer1[lin][col] = "~";
                gabaritoPlayer2[lin][col] = "~";
            }
            } else if (Objects.equals(tabuleiro1[lin][col], "1")) {
                System.out.println("***");
                System.out.println("Voce acertou um navio");
                System.out.println("***");
                gabaritoPlayer1[lin][col] = "x";
                gabaritoPlayer2[lin][col] = "x";
                quantPartesNavios--;
            }
            else if (Objects.equals(tabuleiro2[lin][col], "1")) {
                System.out.println("***");
                System.out.println("Voce acertou um navio");
                System.out.println("***");
                gabaritoPlayer1[lin][col] = "x";
                gabaritoPlayer2[lin][col] = "x";
                quantPartesNavios--;
            }
        }
        System.out.println("Parabens, você eliminou todos os barcos e venceu o jogo!");
        return false;
    }
}