entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

problema arreglo bidimensional en JAVA

``public class Mochila {

    private static final int  pesoMaximo;
    private static final int items[][] = {{2,3},{3,4},{4,5},{5,6}};
    static{
     pesoMaximo=5;

    }

private static int mochilaDinamica(int p[][], int capacidad){
    int n=p.length;
    int i;
    int w;
    int beneficio[][]=new int[n+1][capacidad+1];

    for (i=0;i<=capacidad;i++){
        beneficio[0][i]= 0;
    }
    for(w=1;w<=n;w++){
        beneficio[w][0]=0;

    }

    for(i=1;i<=n;i++){
        for(w=1;w<=capacidad;w++){
            if(w<p[i-1][i-1]){
                beneficio[i][w]=beneficio[i-1][w];
            }
            else{
                if(beneficio[i-1][w]>=beneficio[i-1][w-p[i-1][i-1]]+p[i-1][w]){
                    beneficio[i][w]=beneficio[i-1][w];
                }
                else{
                    beneficio[i][w]=beneficio[i-1][w-p[i-1][i-1]]+p[i-1][w];
                }
            }

            }
        }return beneficio[n][capacidad];
    }

    public static void main(String[] args){

        System.out.println("version dinamica:"+ mochilaDinamica(items, pesoMaximo));
    }

}

al ejecutar este codigo me lanza este error :
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2
at mochila.Mochila.mochilaDinamica(Mochila.java:38)
at mochila.Mochila.main(Mochila.java:56)
nose que es si me pueden ayudar seria de gran ayuda gracias

1 Respuesta

3votos

MitsuGami Puntos8010

Tu código es altamente ilegible. Utilizas nombres para variables que no describen absolutamente nada, y hace un proceso muy largo. Primero, es bueno que tomes en cuenta estas recomendaciones:

  • Las variables deben describir su propósito.
  • Los procesos largos, se pueden dividir una serie de procesos pequeños, modularizando y dejando un código entendible.
  • Usar constantes en lugar de i, x, z, etc. Por ejemplo, reemplazar i < 5 por i < MAX_CAPACIDAD.

Respecto a tu problema, tienes que aprender a reconocer las excepciones. Generalmente te dan suficiente información como para darte cuenta o buscar su causa. ArrayOutOfBoundsException se lanza cuando se está queriendo acceder a un elemento de un array cuya posición excede su tamaño. Básicamente esta excepción te dice: ¡hey! Esa posición no existe, estás sobrepasando por 2 mi límite.

Actualización

A simple vista veo que el for padre declara i=1 e itera hasta i<=1. Has de saber que los arrays empiezan con índice 0 hasta N-1, donde N es su tamaño. Por ende, cuando i = 10 y haces p[i-1] ya hay un desbordamiento de 2 posiciones, que puede ser la causa de la excepción.

0voto

javier comentado

sorry es que soy nuevo en esto de java ... el codigo falla cuando empiezo el primer "if" habia buscado que significaba pero no puedo solucionar el error por eso

0voto

MitsuGami comentado

¿Por qué te disculpas? Es normal, todos empezamos así, solo acuérdate de esos consejos ;) Respecto a tu duda, tienes que ir probando. Ve mi update.

0voto

javier comentado

el problema es con la cantidad de columnas de la matriz[][] que se exede como puedo sacar la cantidad de columnas del arreglo p[][] y asignarselas a una variable??

0voto

MitsuGami comentado

¿Todas las filas tienen la misma cantidad de columnas? Si es así, puedes obtener el número de columnas de cualquier fila: int cantColumnas = matriz[0].length.

Por otro lado, si quieres saber el total de columnas, crea un método privado llamado getFullColumnCount() que cuente el número de columnas totales:

int numColumnas = 0;
for(int i = 0; i < matriz.length; i++) {
    for(int k = 0; k < matriz[i][k].length; k++) {
        cantColumnas++;
    }
}

return cantColumnas;

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta