ciao a tutti, sto creando un gioco (BattagliaNavale) ma ho un problema, ovvero quando colpisco una nave, già colpita, mi dice solamente che ho colpito la nave e non che l'ho affondata, nonostante l'istruzione.
é evidente che sbaglio qualcosa, e vi chiedo se qualcuno può aiutarmi, correggendo il mio errore e magari spiegarmi dove sbaglio!


codice:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Bat2Nav {


	private static int navi = 10;
	private int[][] campoDaGioco;
	// creo una nuova matrice delle dimensioni specificate
	Bat2Nav(int righe, int colonne) {
	campoDaGioco = new int[righe][colonne];
	}
	// creo una nuova matrice a partire da un array bidimensionale passato in
	// input
	Bat2Nav(int[][] campoDaGioco) {
	this.campoDaGioco = campoDaGioco;
	}
	public int getRighe() {
	return campoDaGioco.length;
	}
	public int getColonne() {
	return campoDaGioco[0].length;
	}
	public static int ColpoRiga() throws Exception {
	System.out.println("Inserire la riga del campo da gioco (da 1 a 10 ) ");
	BufferedReader tastiera = new BufferedReader(new InputStreamReader(System.in));
	// System.out.println("Inserire la riga del campo da gioco (da 1 a 10 ) ");
	int ColpoRiga = Integer.parseInt(tastiera.readLine());
	return ColpoRiga;
	}
	public static int ColpoColonna() throws Exception {
	System.out.println("Inserire la colonna del campo da gioco (da 1 a 10 ) ");
	BufferedReader tasto = new BufferedReader(new InputStreamReader(System.in));
	// System.out.println("Inserire la colonna del campo da gioco (da 1 a 10 ) ");
	int ColpoColonna = Integer.parseInt(tasto.readLine());
	return ColpoColonna;
	}
	public void setColpo(int ColpoRiga, int ColpoColonna) throws Exception {
	int	indiceRiga= ColpoRiga-1;
	int indiceColonna= ColpoColonna-1;
	if (ColpoRiga >= 0 & ColpoRiga <= getRighe() & ColpoColonna >= 0 & ColpoColonna <= getColonne()) {
	if (campoDaGioco[indiceRiga][indiceColonna] == 0) {

	System.out.println("Acqua, non ci sono navi in questa casella!");

	} else { 
	// Setto la casella in cui è presente la nave colpita uguale a 2
	campoDaGioco[indiceRiga][indiceColonna] = 2;
	//verifico se nelle righe o colonne adiacenti ci sono navi già colpite (2) in maniera tale       //da poter dire con il seguente controllo se la nave è anche affondata
	try{
	 {if (campoDaGioco[indiceRiga-1][indiceColonna-1] == 2||campoDaGioco[indiceRiga-1][indiceColonna+1] == 2||campoDaGioco[indiceRiga+1][indiceColonna-1] == 2||campoDaGioco[indiceRiga+1][indiceColonna+1] == 2){
		System.out.println("Colpita e affondata!");
// decremento il numero di navi
		--navi;
	}
	 }}catch(IndexOutOfBoundsException e){
		 System.out.println("Colpita!Ma non mi hai affondata!");
		 //System.out.println("riscontrata eccezione");
	 }
	 
	// System.out.println("Colpita!Ma non mi hai affondata!");
 
	}
	} else {
	System.out.println("inserimento impossibile: indici errati");
	}
	}
	@SuppressWarnings("static-access")
	public static void main(String[] args) throws Exception {

	Bat2Nav A = new Bat2Nav(new int[][] { 
	{ 0, 0, 0, 1, 1, 0, 0, 0, 0, 0 },
	{ 1,1, 0, 0, 0, 0, 0, 0, 0, 0 },
	{ 0, 0, 0, 1, 0, 1, 1,0, 0, 0 },
	{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 },
	{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
	{ 0, 1, 1, 0, 0, 0, 1, 1, 0, 0 },
	{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
	{ 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
	{ 0, 0, 0, 0, 0, 1, 1, 0, 0, 0 },
	{ 0, 0, 1, 1, 0, 0, 0, 0, 1, 1 } });


	for(;;){

	if( navi > 0){
	int riga = A.ColpoRiga();

	int colonna = A.ColpoColonna();

	A.setColpo(riga, colonna);
	} else {
	System.out.println("Complimenti, hai affondato tutte le mie navi!YOU WIN!!!");
	break;
	}
	}
	}
}
ps:il try/catch è corretto?
Grazie a quanti mi aiuteranno.