Hola, necesito ayuda mediavidera.
Estoy haciendo una practica en la que necesito crear un calendario de un torneo en el que todos los equipos jueguen una sola vez contra todos los demás.
mainpublic class main {
public static void main(String[] args) {
int numEquipos=8;
int[][] tabla = new int[numEquipos][numEquipos-1];
calendario c= new calendario();
tabla=c.calendar(tabla);
c.mostrarTabla(tabla);
}
}
calendariopublic class calendario {
public int [][] calendar(int[][] tabla) {
int superior=tabla.length-1;
tabla=formarTabla(tabla, 0, superior);
return tabla;
}
private int[][] formarTabla(int[][] tabla, int inferior, int superior){
if(inferior==superior-1){
tabla[inferior][0]=superior;
tabla[superior][0]=inferior;
}else{
int medio=(inferior+superior)/2;
formarTabla(tabla,inferior,medio);
formarTabla(tabla, medio+1, superior);
System.out.println("PRIMERO: inferior: "+inferior + ", superior: "+ superior + ", medio: "+medio);
completarTabla(tabla, inferior, medio, superior-medio, superior-inferior, medio+1);
System.out.println("SEGUNDO: inferior: "+inferior + ", superior: "+ superior + ", medio: "+medio);
completarTabla(tabla, medio+1, superior, superior-medio, superior-inferior, inferior);
System.out.println("TERCERO: inferior: "+inferior + ", superior: "+ superior + ", medio: "+medio);
for(int i=medio+1; i<superior; i++){
for(int j=1; j<medio; j++){
tabla[i][j] = tabla[i-medio][j]+medio;
System.out.println("tabla["+ i + "][" + j + "] = tabla[" + (i-medio) + "]["+ j + "]" + "+ "+ medio);
mostrarTabla(tabla);
}
}
}
return tabla;
}
private void completarTabla(int[][] tabla, int equInf, int equSup, int diaInf, int diaSup,int equInicial) {
System.out.println("COMPLETAR TABLA");
for(int j=diaInf; j<=diaSup; j++){
tabla[equInf][j]=equInicial+j - diaInf;
}
for(int i=equInf+1; i<=equSup; i++){
//System.out.println(i +" "+ diaInf + " " + diaSup);
//System.out.println("iteracion en completarTabla :" + i);
//mostrarTabla(tabla);
tabla[i][diaInf]= tabla[i-1][diaSup];
for(int j=diaInf+1; j<=diaSup;j++){
tabla[i][j]=tabla[i-1][j-1];
}
}
}
public void mostrarTabla(int [][] tabla){
System.out.println();
System.out.println(" TABLA ");
System.out.println();
for(int i=0;i<tabla.length ;i++){
for (int j=0;j<tabla.length-1; j++){
System.out.print(tabla[i][j] + " ");
}
System.out.println();
}
}
}
resultadoException in thread "main" java.lang.ArrayIndexOutOfBoundsException: 7
at calendario.completarTabla(calendario.java:45)
at calendario.formarTabla(calendario.java:22)
at calendario.calendar(calendario.java:6)
at main.main(main.java:7)
Se que lo que produce la excepcion es en la llamada a completar tabla pasa un 7 en "superior-inferior",
luego en la funcion completarTabla, se utiliza este valor para acceder a una posicion de la matriz,, que solo llega hasta la 6... pero se supone que la llamada a la función está bien..