Autor Tema: Curso para ver todos los conceptos básicos de Java desde cero  (Leído 1837 veces)

lRoil

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 1
    • Ver Perfil
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");
    }
}

« Última modificación: 08 de Marzo 2017, 20:14 por Ogramar »

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2660
    • Ver Perfil
Re:Problemilla en un ejercicio
« Respuesta #1 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

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".