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

Título: Curso para ver todos los conceptos básicos de Java desde cero
Publicado 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

Código: [Seleccionar]
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");
    }
}

Título: Re:Problemilla en un ejercicio
Publicado por: Ogramar en 08 de Marzo 2017, 20:14
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