Funcion RecomendarButacas Ayuda!! (Recorrer arrays de arrays)

Iniciado por elenfatico, 6 Abril 2016, 02:10 AM

0 Miembros y 1 Visitante están viendo este tema.

elenfatico

Buenas tardes.

Tengo que entregar un proyecto a la universidad y solo me falta una función de todo el proyecto. Llevo con ella varios días y no consigo sacarla.

Se trata que el primer algoritmo mira la Sala de la pelicula desde la mitad hacia arriba, y va por cada fila de derecha a izquierda y por ejemplo si yo le meto a la función que quiero 3 butacas, me recomienda 3 butacas que esten juntas y en la misma fila. Por ejemplo si la sala tiene 10 filas y 9 columnas y quiero 3 butacas, me recomendaria que comprara las entradas (6,9),(6,8) y (6,7), en caso de que esas estuvieran ocupadas, seguiria buscando.

Si toda la parte de arriba de la sala estuviera ocupada, con el segundo algoritmo, miraria la parte inferior de la sala.
Eso es lo que yo he entendido.
Actualmente llevo hecho lo siguiente de la función y no se como seguir:

Código (java) [Seleccionar]


// recomendarButacasContiguas: método que dados un número N de butacas, devuelve un objeto de
// tipo ButacasContiguas que contiene la fila y la columna de la butaca recomendaba con menor
// número de columna, y el número de butacas solicitadas. El algoritmo para obtener las butacas
// recomendadas es el siguiente:
//
// 1. Se buscan las primeras N butacas contiguas libres empezando por la fila (N_FILAS+1)/2 + 1
// y acabando en la fila N_FILAS. Cada fila se recorre empezando por la columna
// N_COLUMNAS y acabando en la columna 1.
// 2. Si en el paso anterior no se encuentran N butacas contiguas libres, se buscan las primeras N
// butacas contiguas libres empezando por la fila (N_FILAS+1)/2 y acabando en la fila 1.
// Cada fila se recorre empezando por la columna N_COLUMNAS y acabando en la columna
//      1.
// Si no existen N butacas libres contiguas en la sala para la propia sesión, se devuelve null. Por
// ejemplo, si tomamos la sala de la figura 2 y buscamos 3 butacas contiguas libres, este algoritmo
// devolverá las butacas (4, 3), (4, 4) y (4, 5).

public ButacasContiguas recomendarButacasContiguas(int noButacas){
int n_filas=this.estadoAsientos.length;
int n_columnas=this.estadoAsientos[0].length;
int fila=0;
int columna=0;
boolean compraFinalizada = false;
int asientosRequeridos=0;
ButacasContiguas resultado = new ButacasContiguas (fila, columna, noButacas);


//1er Algoritmo, recorre las filas desde (n_filas+1)/2+1 HASTA la N_FILAS
for(int i=((n_filas+1)/2)+1; i<n_filas && !compraFinalizada &&asientosRequeridos<noButacas;i++){
for(int j=n_columnas+1; j>=0 &&!compraFinalizada &&asientosRequeridos<noButacas; j--){
if(asientosRequeridos<noButacas){ //Hasta llegar al Numero de butacas que se compra
if(estadoAsientos[i][j]==0){ //Si un asiento esta vacio
asientosRequeridos++; //Se incrementa en 1

}
else if(estadoAsientos[i][j]!=0){ //Si no esta libre
asientosRequeridos=0; //No se incrementa y se sigue buscando


}
}else if(asientosRequeridos==noButacas){ //Si ya se han encontrado todos los asientos
compraFinalizada=true;
}



}

}
//2do Algoritmo, recorre las filas desde (n_filas+1)/1 HASTA la Fila1
for(int i=(n_filas+1)/2; i>0 && !compraFinalizada && asientosRequeridos<noButacas ; i--){
asientosRequeridos=0;
for(int j=n_columnas+1; j>0 && !compraFinalizada && asientosRequeridos<noButacas ; j--){
if(asientosRequeridos<noButacas){
if(estadoAsientos[i][j]==0){
asientosRequeridos++;
}else if(estadoAsientos[i][j]!=0){
asientosRequeridos=0;
}
}else if(asientosRequeridos==noButacas){
compraFinalizada=true;
}
}
}
return resultado;

}



El objeto ButacasContiguas (no puedo modificar nada de este objeto) tiene los siguientes atributos y metodos):

Código (java) [Seleccionar]

package cine;

public class ButacasContiguas {

private int fila, columna, noButacas;

public ButacasContiguas(int fila, int columna, int noButacas) {
this.fila = fila;
this.columna = columna;
this.noButacas = noButacas;
}

public int getFila() {
return fila;
}

public int getColumna() {
return columna;
}

public int getNoButacas() {
return noButacas;
}

}



Y los atributos de Sesion.java que es la clase en la que se tiene que construir la funcion de RecomendarButacasContiguas son:

Código (java) [Seleccionar]


private String hora;
private int asientosDisponibles; //es un entero que indica el número de asientos disponibles en la propia sesión.

// es un entero que se incrementa cada vez que se realiza una venta de entradas para la
// propia sesión. Se utiliza para generar identificadores de venta diferentes para cada compra.

private int sigIdCompra;

// es una matriz de enteros con las mismas dimensiones que la sala asociada a la
// propia sesión, en la que se representan las butacas compradas y las disponibles para la propia
// sesión. Si una butaca en la posición (i, j) está disponible, se guarda un valor 0, y en caso
// contrario, se guarda el identificador de venta asociado a la butaca. Como en una venta se puede
// comprar más de una butaca, podría suceder que en la matriz haya varios identificadores de
// ventas iguales en posiciones contiguas

private int [][] estadoAsientos;


Espero que puedan ayudarme, gracias :)

LaiaxanIV

Se supone que tu pregutna es como modificar los atributos de la clase Sesion.java? Si es así, lo que tienes que hacer es asignar a estadoAsientos el sigIdCompra a las butacas contguas que has seleccionado y al finalizar, si ha encontrado el nro de butacas incrementarlo. Por otra parte, si encuentras el nro de butacas contiguas, también tendras que decrementar asientosDisponibles.
En el segundo algoritmo, tendrias que recorrer hasta i>= 0 y j>= 0 ya que la COLUMNA1 equivale a la posicion de estadoAsientos[][0].

Lo que no entiendo muy bien es el resultado, ¿tienes que devolver la primera butaca disponible y a partir de noButacas sabrás cuales són? Tienes que devolver tantas butacas como nroButacas?

50ShadesOfKenyi