Java将if条件判断为false,何时应该为true

问题描述 投票:-1回答:2

我有一个用于处理航班预订的程序。我的程序包括3个类:主类,一个用于创建乘客信息的名为“旅客”的类,以及一个处理航班信息本身注册的类。

为了处理座位注册,我首先在main中调用方法Passenger.setSeatNumber()。然后,此方法在Registration类中调用一个方法,并将此操作的结果分配给乘客的座位号变量,然后在主要情况下,我通过getSeatNumber()方法分配该座位号。(我知道这很冗长,但是老师希望我们能理解OOP和多个类,因此我们应该使用所有这些方法和类来处理这些东西)

现在,在我的用于分配席位的注册方法中,如果用户尝试输入小于0或大于20的值,或者如果输入的值已经存在于用户名中,则我有一个if语句应评估为true包含已注册席位的HashSet。如果计算结果为true,则应抛出自定义异常以获取正确的输入。问题是,即使我输入一个负数或超过20,该条件也永远不会求值为真,并且HashSet似乎也没有在注册数字。

public static int asientosReservados(int x) {

    HashSet<Integer> asientos = new HashSet(21);

    asientos.add(x);

    //Añadir un duplicado a un HashSet no lanza un error, sino que la operación retorna false. 
    //Con este método, al retornar 0 para false 
    //o 1 para true, se puede más adelante determinar si ocurrió un duplicado. 
        if (asientos.add(x) == false) {
            return 0;
        } else {
            return 1;
        } 
    } 

    //Seleccionar y retornar asiento.
    //Se va a revisar que sea en el rango correcto y que este no sea duplicado.

    public void seleccionarAsiento() {
        do{
            try{
                ExcepcionRegistro e = new ExcepcionRegistro("Ha ocurrido un error con el registro del asiento.");
                System.out.println("\n\n Digite el número de asiento del 0 hasta el 20");
                this.asiento = input.nextInt();
                asientosReservados(this.asiento);
                if(this.asiento < 0 || this.asiento > 20 || asientosReservados(this.asiento) == 0) {
                    throw e;
                }
                continuarCiclo = false;
            } 
            //Bloque catch para determinar si el asiento estaba fuera de rango o si ya existia.
            catch (ExcepcionRegistro e) {
                if (this.asiento < 0 || this.asiento > 20){
                    System.out.println(e.getMessage());
                    System.out.println("\nPor favor seleccione nuevamente un asiento entre el 1 y el 20.");
                    input.nextLine();
                } else {
                    System.out.println(e.getMessage());
                    System.out.println("\nEl asiento seleccionado ya está ocupado. Seleccione otro");
                    input.nextLine();
                }
            }
        } while (continuarCiclo == true);
    }
java if-statement exception hashset
2个回答
-1
投票

请评论asientos.add(x):

    asientos.add(x); comment this line

    //it try add the entry in hashset again when you are 
     going 
   // in if condition he found that entry is already added 
    //so it will return false.

    //Añadir un duplicado a un HashSet no lanza un error, 
    sino que la operación retorna false. 
   //Con este método, al retornar 0 para false 
   //o 1 para true, se puede más adelante determinar si 
   ocurrió un duplicado. 
    if (asientos.add(x) == false) {
        return 0;
    } else {
        return 1;
    } 

-1
投票

更改班级以匹配:

public class Registration{

public static class NotAValidSeatNumberValueExeption extends NumberFormatException{
    public NotAValidSeatNumberValueExeption(String value) {
        super(value);
    }
}

public static class SeatIndexOutOfBoundsException extends IndexOutOfBoundsException{
    public SeatIndexOutOfBoundsException(String value) {
        super(value);
    }
}

public static class SeatAlreadyTakenException extends IllegalArgumentException{
    public SeatAlreadyTakenException(String value) {
        super(value);
    }
}


private static final Scanner input = new Scanner(System.in);
private static final boolean[] seatStatus = new boolean[21];

public static int getSeatFromUser() {
    int seatNumber = -1;
    do {
        try {
            System.out.print("\nEnter seat number: ");
            String line = input.nextLine().trim();
            try {
                seatNumber = Integer.parseInt(line);
            }catch(NumberFormatException nfe) {
                throw new NotAValidSeatNumberValueExeption(line);
            }

            if(seatNumber < 0 || seatNumber > 20)
                throw new SeatIndexOutOfBoundsException(line);

            if (seatStatus[seatNumber])
                throw new SeatAlreadyTakenException(line);
        }catch(NotAValidSeatNumberValueExeption | SeatIndexOutOfBoundsException | SeatAlreadyTakenException ex) {
            System.out.println(String.format("\nERROR: %s '%s'", ex.getClass().getSimpleName(),ex.getMessage()));
            seatNumber = -1;
        }

    }while(seatNumber == -1);

    seatStatus[seatNumber] = true;
    return seatNumber;

}

}


0
投票

更改班级以匹配:

class YourClass{

    private static final HashSet<Integer> asientos = new HashSet(21);

    public static int asientosReservados(int x) {
        return asientos.add(x) ? 1 : 0;
    } 
}
© www.soinside.com 2019 - 2024. All rights reserved.