Foros aprenderaprogramar.com
Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: lRoil en 16 de Enero 2017, 18:56
-
Buenas, estoy haciendo un ejercicio de clase en el que tengo que hacer el juego de hundir la flota, estoy en el punto en el que la maquina coloca los barcos y me esta petando todo el rato, creo que es porque se me sale del array, pero el programa me peta en lo que es un intento de prueba para que si se va a salir del array no lo haga y vuelva a elegir otra posicion.
Os dejo todo el codigo, dejo asteriscos donde me salta el erro, gracias
public class cpu {
int fila;
int columna;
int direccion;
int filas;
int columnas;
int[][] tableroCpu;
int[][] tableroJugador;
public void inicializar() {
System.out.println("***Bienvenido***");
System.out.println("");
do {
filas = Teclado.pideEntero("Selecciona las filas con las que quieres jugar (Minimo 10)");
columnas = Teclado.pideEnteroPositivo("Selecciona las columnas con las que quieres jugar (Minimo10)");
} while (filas < 10 && columnas < 10);
tableroCpu = new int[filas][columnas];
tableroJugador = new int[filas][columnas];
for (int x = 0; x < filas; x++) {
for (int i = 0; i < columnas; i++) {
tableroCpu[x][i] = 0;
tableroJugador[x][i] = 0;
}
}
System.out.println(" FIN INICIALIZAR");
}
public void barcos() {
System.out.println("Colocando barcos...");
//BARCO 4 CASILLAS
do {
int fila = (int) (Math.random() * filas);
int columna = (int) (Math.random() * columnas);
direccion = (int) (Math.random() * 4);
switch (direccion) {
case 0:
***** if (tableroCpu[fila + 3][columna] <= tableroCpu.length - 1) {
if (tableroCpu[fila][columna] == 0 & tableroCpu[fila + 1][columna] == 0 & tableroCpu[fila + 2][columna] == 0 & tableroCpu[fila + 3][columna] == 0) {
tableroCpu[fila][columna] = 1;
tableroCpu[fila + 1][columna] = 1;
tableroCpu[fila + 2][columna] = 1;
tableroCpu[fila + 3][columna] = 1;
}
}
break;
case 1:
****** if (tableroCpu[fila][columna + 3] <= tableroCpu.length - 1) {
if (tableroCpu[fila][columna] == 0 & tableroCpu[fila][columna + 1] == 0 & tableroCpu[fila][columna + 2] == 0 & tableroCpu[fila][columna + 3] == 0) {
tableroCpu[fila][columna] = 1;
tableroCpu[fila][columna + 1] = 1;
tableroCpu[fila][columna + 2] = 1;
tableroCpu[fila][columna + 3] = 1;
}
}
break;
case 2:
****** if (tableroCpu[fila - 3][columna] <= tableroCpu.length - 1) {
if (tableroCpu[fila][columna] == 0 & tableroCpu[fila - 1][columna] == 0 & tableroCpu[fila - 2][columna] == 0 & tableroCpu[fila - 3][columna] == 0) {
tableroCpu[fila][columna] = 1;
tableroCpu[fila - 1][columna] = 1;
tableroCpu[fila - 2][columna] = 1;
tableroCpu[fila - 3][columna] = 1;
}
}
case 3:
***** if (tableroCpu[fila][columna - 3] <= tableroCpu.length - 1) {
if (tableroCpu[fila][columna] == 0 & tableroCpu[fila][columna - 1] == 0 & tableroCpu[fila + 2][columna - 2] == 0 & tableroCpu[fila][columna - 3] == 0) {
tableroCpu[fila][columna] = 1;
tableroCpu[fila][columna - 1] = 1;
tableroCpu[fila][columna - 2] = 1;
tableroCpu[fila][columna - 3] = 1;
}
}
}
} while (tableroCpu[fila][columna] == 0);
System.out.println("Colocado barco de 4");
}
}
-
Buenas para obtener respuesta en los foros es importante que pongas un título adecuado y seguir las indicaciones que se dan en https://www.aprenderaprogramar.com/foros/index.php?topic=1460.0
En el código que has puesto veo int fila = (int) (Math.random() * filas);
Luego if (tableroCpu[fila + 3][columna]
Parece que haces un uso incorrecto de los índices, ya que fila+3 podría estar fuera del rango de valores posibles del array
Recomendamos este curso para ver todos los conceptos básicos de Java: http://aprenderaprogramar.com/index.php?option=com_content&view=category&id=68&Itemid=188
Salu2