Problema para detectar un array completo

Mi consulta radica en que estoy haciendo una aplicación con un array de 10 asientos de avión para reservar asientos y cuando el arreglo esta lleno no me deja imprimir "Próximo vuelo dentro de tres horas"
Mi código es el siguiente:
boolean pasajes[] = new boolean[11];
boolean lleno = true;
public void menu()
{
Scanner entrada = new Scanner(System.in);
System.out.print("Por favor escriba 1 para Primera Clase y Por favor escriba 2 para Económico o -1 para salir: ");
int respuesta = entrada.nextInt();
while(respuesta != -1)
{
if (respuesta == 1)
{
for(int i = 1; i < pasajes.length; i = i + 1)
{
if(pasajes == false && i <= 5 )
{
pasajes = true;
System.out.print("Su numéro de asiento es " + i + "\n");
break ;
}
if(pasajes == false && i > 5)
{
System.out.println("No quedan asientos en Primera clase");
System.out.print("Desea una reserva en economica S/N");
String decision = entrada.next();
if(decision.equals("S") )
{
for(int h = 6; h < pasajes.length; h = h + 1)
if(pasajes[h] == false)
{
pasajes[h] = true;
System.out.print("Su numéro de asiento es " + i + "\n");
break ;
}
break;
}
}
}
Espacio(pasajes); // aquí llamo el método para comprobar si el avión está lleno
if (lleno == true)
System.out.print("Proximo vuelo dentro de tres horas");
System.out.print("Por favor escriba 1 para Primera Clase y Por favor escriba 2 para Económico o -1 para salir: ");
respuesta = entrada.nextInt();
Metodo para saber si esta lleno el arreglo
public boolean espacio(boolean f[])
{
for(int i = 1;i < pasajes.length; i = i + 1 )
if(pasajes == false)
{
lleno = false;
break;
}
return lleno;
}
Como siempre muchas gracias por su disposición y espero que alguien pueda orientarme,
Respuesta
1
Voy a ver tu código, pero antes, tengo que hacer una primera sugerencia en tus for
pasajes == false
Me sale error, ya que no puedes comparar un vector entero con una única variables de tipo boolean, entonces, ¿intentas comprar cara elemento del vector de esta maera?
pasajes ==false ???
Y otra cosa, ¿por qué empiezas los for desde 1 y no desde 0? ¿Si un vector empieza desde el indice 0?
Por mientras voy a estar probando tu código, ¿pero al main solo ejecuto el método menu cierto?
--Corrígeme si me equivoco en mis sugerencias
Hola gracias por la respuesta, te comento con respecto a esto:
pasajes == false
Resulta que mi vector es booleano e inicializado en falso para cuando asigno un asiento se vuelve a true.
Con respecto al recorrer el for desde 1, siempre lo hago en estos casos ya que es poco serio que me imprima numero de asiento = 0, entonces lo descarto y al ser 10 asientos donde del 1 al 5 primera clase y 6 a 10 económico declaro al vector con 11 elementos.
Si desde el main con el objeto llama a menu, aquí dejo mi código completo para que lo tengas, lo único que me falta es que tome el avión como completo e imprima próximo vuelo dentro de tres horas.
public class Reserva {
boolean pasajes[] = new boolean[11];
boolean lleno = true;
//inicializar en falso el arreglo
public void inicializarArreglo()
{
for(int i = 0; i < pasajes.length; i = i + 1)
pasajes = false;
}
public void menu()
{
Scanner entrada = new Scanner(System.in);
System.out.print("Por favor escriba 1 para Primera Clase y Por favor escriba 2 para Económico o -1 para salir: ");
int respuesta = entrada.nextInt();
while(respuesta != -1)
{
if (respuesta == 1)
{
for(int i = 1; i < pasajes.length; i = i + 1)
{
if(pasajes == false && i <= 5 )
{
pasajes = true;
System.out.print("Su numéro de asiento es " + i + "\n");
break ;
}
if(pasajes == false && i > 5)
{
System.out.println("No quedan asientos en Primera clase");
System.out.print("Desea una reserva en economica S/N");
String decision = entrada.next();
if(decision.equals("S") )
{
for(int h = 6; h < pasajes.length; h = h + 1)
if(pasajes[h] == false)
{
pasajes[h] = true;
System.out.print("Su numéro de asiento es " + i + "\n");
break ;
}
break;
}
}
}
espacio(pasajes);
if (lleno == true)
System.out.print("Proximo vuelo dentro de tres horas");
System.out.print("Por favor escriba 1 para Primera Clase y Por favor escriba 2 para Económico o -1 para salir: ");
respuesta = entrada.nextInt();
}
if(respuesta == 2)
{
for(int e = 6;e < pasajes.length; e = e + 1)
{
if(pasajes[e] == false )
{
pasajes[e] = true;
System.out.print("Su numéro de asiento es " + e + "\n");
break;
}
if(pasajes[e] == true && e == 10)
{
System.out.println("No quedan asientos en Ecónomico");
System.out.print("Desea una reserva en Primera Clase S/N");
String decision = entrada.next();
if(decision.equals("S") )
{
for(int g = 1; g < pasajes.length; g = g + 1)
if(pasajes[g] == false && g <= 5)
{
pasajes[g] = true;
System.out.print("Su numéro de asiento es " + g + "\n");
break ;
}
}
}
}
System.out.print("Por favor escriba 1 para Primera Clase y Por favor escriba 2 para Económico o -1 para salir: ");
respuesta = entrada.nextInt();
}
}
}
public boolean espacio(boolean f[])
{
for(int i = 1;i < pasajes.length; i = i + 1 )
if(pasajes == false)
{
lleno = false;
break;
}
return lleno;
}
}
Muchas gracias por tu respuesta seguiré intentando hacer funcionar mi método espacio o probando de otra manera, que te encuentres bien, saludos y a la espera de cualquier sugerencia!
Hola como estas, lo he intentado de otra manera y me pasa que cuando ingreso por respuesta 1 para vuelos de primera clase me anda bárbaro llenando todos los asientos y preguntando por si desea reservar económicos porque ya esta lleno, y también me muestra próximo vuelo dentro de tres horas cuando esta lleno.
Así:
public void menu()
{
Scanner entrada = new Scanner(System.in);
System.out.print("Por favor escriba 1 pra Primera Clase, 2 Para Economico o - 1 para finalizar ");
int respuesta = entrada.nextInt();
while(respuesta != -1)
{
if(respuesta == 1)
{
for(int i = 1; i < pasajes.length; i = i + 1)
{
if(pasajes == false && i <= 5)
{
pasajes = true;
System.out.print("Su númereo de asiento es: " + i);
break;
}
if(pasajes == false && i > 5)
{
System.out.print("\nNo quedan mas asientos en Primera Clase");
System.out.println("\nDesea una reserva en economico S/N ");
String decision = entrada.next();
if (decision.equals("S"))
{
for(int r = 6; r < pasajes.length; r = r + 1)
if(pasajes[r] == false)
{
pasajes[r] = true;
System.out.print("Su numero de asiento es: " + i);
break;
}
//else
// System.out.print("Proximo vuelo dentro de tres horas");
break;
}
}
}
System.out.print("\nPor favor escriba 1 pra Primera Clase, 2 Para Economico o - 1 para finalizar ");
respuesta = entrada.nextInt();
for(int u = 1; u < pasajes.length ; u = u + 1)
if(pasajes == true && u ==10)
{
System.out.println("Proximo vuelo dentro de tres horas");
}
}
Pero cuando lo realizo para respuesta = 2 o sea económico, me llena bárbaro y me pregunta que si quiero en primera porque esta lleno y bien hasta cuando llega a 4 que me dice Próximo vuelo dentro de tres horas y luego pregunta si deseo sacar en primera clase. No entiendo ya que aplique mi logia anterior pero a la inversa. Este es mi código de respuesta 2:
if(respuesta == 2)
{
for(int j = 6; j < pasajes.length; j = j + 1)
{
if(pasajes[j] == false)
{
pasajes[j] = true;
System.out.print("Su número de asiento es " + j);
break;
}
if(pasajes[j] == true && j == 10)
{
System.out.print("\nNo quedan mas asientos en Economico");
System.out.println("\nDesea una reserva en Primera clase S/N ");
String d = entrada.next();
if(d.equals("S"))
{
for(int r = 1; r < pasajes.length; r = r + 1)
if(pasajes[r] == false && r <= 5)
{
pasajes[r] = true;
System.out.print("Su numero de asiento es: " + r);
break;
}
//else
// System.out.print("Proximo vuelo dentro de tres horas");
break;
}
}
}
System.out.print("\nPor favor escriba 1 pra Primera Clase, 2 Para Economico o - 1 para finalizar ");
respuesta = entrada.nextInt();
for(int u = 1; u < pasajes.length ; u = u + 1)
if(pasajes == true && u == 10)
{
System.out.println("Proximo vuelo dentro de tres horas");
}
}// termina el if de respuesta = 2
Disculpa por la insistencia pero trate de realizarlo de esta manera sin un método booleano y al principio anda pero cuando realizo las entradas por 2 no, que estés muy bien saludos!
Ok déjeme un momento para pensarlo, ahorita estoy formateando una maquina, apenas termine empiezo a arreglar su código.
Estuve revisando tu código, a fondo y te haces muchas bolas, te enredas mucho, mira, el primer error que encontré fue el que te mencione en la respuesta pasada
No se que compilador usaras, pero en el que yo uso no me deja comprar todo un vecto entero de tipo boolean a una sola variable de comparación, con esto me refiero a
Pasajes == false, ya que haces un for y no comparas cada elemento del vecto, entonces el for estaría por las puras. Pero iwal me sale error a mi.
Segundo, que no tienes una forma estructurada de programar, estas programando cada casuística, cosa que al final te enredas y vas de un lado a otro (económico a primera clase y al revez) y te sale mal.
Así que te voy a dar una solución que he hecho a tu problema, más ordenada y estructurada, he aplicado la recursividad para no usar el while y evitarme problemas como los tuyos.
Bueno ahí te va
package javaapplication4;
import java.util.Scanner;
/**
*
* @author Diego
*/
public class diego {
static Scanner entrada = new Scanner(System.in);
static String[] primera_clase=new String[5];
static String[] economico =new String[5];
static int n=0;
static int m=0;
public static void definir_asientos(){
for(int i=0;i<5;i++){
primera_clase="Vacio";
economico="Vacio";
}
}
public static int llena_primera_clase(){
check_avion();//ver si el avion esta lleno.
System.out.print("Por favor escriba 1 para Primera Clase y Por favor escriba 2 para Económico o -1 para salir: ");
if(entrada.nextInt()==1){//para primera clase
if(check(primera_clase)==1){//si la primera clase esta llena...
System.out.println("Primera clase lleno, desea escoger uno en economico ?: S/N");
if(entrada.next().equals("S")){ return llena_economicos();}
else return 0;
}
else {//si aun quedan asientos para la primera clase
primera_clase[n]="Ocupado";
System.out.println("Su numero de asiento es el: "+(n+1));
}
} else {//para economico
return llena_economicos();
}
n++;
return llena_primera_clase();
}
private static int llena_economicos() {
check_avion();//ver si el avion esta lleno
if(check(economico)==1){
System.out.println("Clase economica llena, desea escoger uno en primera clase ?: S/N");
if(entrada.next().equals("S")){ return llena_primera_clase();}
else return 0;
} else {
economico[m]="Ocupado";
System.out.println("Su numero de asiento es: "+(m+6));
m++;
return llena_primera_clase();
}
}
private static int check(String[] primera_clase) { //1 para lleno, 0 para vacio
for(int i=0;i<primera_clase.length;i++){
if("Vacio".equals(primera_clase)){//si esta vacio
return 0;
}
}
return 1; //si esta lleno
}
private static void check_avion() {
int cont_primera=0,cont_economico=0;
for(int i=0;i<5;i++){
if(primera_clase.equals("Ocupado"))cont_primera++;
if(economico.equals("Ocupado"))cont_economico++;
}
if(cont_primera==5 && cont_economico==5){
System.out.println("El avion ya se encuentra lleno, el vuelo sale dentro de 3 horas.");
System.exit(0);
}
}
}
_____________________________
Y en mi la clase main solo debo poner.
diego.definir_asientos();
diego.llena_primera_clase();
______________________________
Como veras mi solución es mucho más pequeña que la tuya, por el tema de la recursividad y cumple la funcionalidad completa, excepto el tema del -1 ya que eso te lo dejo para que lo apliques. Si es que no la entiendes no dudes en preguntarme.
Hola muchas gracias por tu disponibilidad y respuesta, yo utilizo netbeans 6.0 como compilador, te cuento que me han pedido que resuelva el ejercicio sin recursividad ya que no le hemos visto ya me había pasado cuanco calcule un factorial de esta manera, te agradezco tu tiempo y respuesta ya que me servirá de mucho cuando llegue a recursividad, que estés muy bien saludos y gracias!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas