Java 在一个if语句中处理多个异常

Java 在一个if语句中处理多个异常,java,exception-handling,Java,Exception Handling,我在抛出和捕获异常方面有困难 下面是assignSeat()的代码,assignSeat是在另一个类的try块中调用的 void assignSeat(String passengerName, int x, int y) throws SeatOccupiedException, InvalidPassengerNameException { Seat tSeat = airplane.getSeat(x,y); if (tSeat!=null) { i

我在抛出和捕获异常方面有困难

下面是assignSeat()的代码,assignSeat是在另一个类的try块中调用的

void assignSeat(String passengerName, int x, int y) throws SeatOccupiedException, InvalidPassengerNameException
{
    Seat tSeat = airplane.getSeat(x,y);
    if (tSeat!=null)
    {
        if (passengerName.isEmpty() || !passengerName.matches("[a-zA-Z]+"))
        {
            throw new InvalidPassengerNameException();
        }
//excluded else if
    else if (foundPassenger(passengerName))
        {
                    airplane.seatList.get(airplane.seatNumber(passengerName)).unOccupy();   
                    tSeat.occupy();
                    for (int i = 0; i<passengers.size();i++)
                        if (passengers.get(i).getName().equals(passengerName))
                            passengers.get(i).changeSeat(tSeat.getSeatName());
        }
        else if (!tSeat.occupied)
        {
            tSeat.occupy();
            addPassenger(passengerName, tSeat.getSeatName());
        }
        else if (tSeat.occupied)
        {
            throw new SeatOccupiedException();
        }
    }
InvalidPassenger名称:

package a2;

public class InvalidPassengerNameException extends Exception
{
    public InvalidPassengerNameException() {}
}
我所有的课都在a2包里

为调用assignSeat的类导入

package a2;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.event.MouseEvent;
import java.awt.BorderLayout;
import javax.swing.*;
import javax.swing.event.*;
package a2;
import java.util.ArrayList;
为已指定座位的类导入

package a2;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.event.MouseEvent;
import java.awt.BorderLayout;
import javax.swing.*;
import javax.swing.event.*;
package a2;
import java.util.ArrayList;

很可能,您在两个不同的包中有两个
SeatOccupiedException
类,您的方法从一个包中抛出该类,而您的代码捕获另一个类。

更改逻辑并简化您的语句:

void assignSeat(String passengerName, int x, int y) throws SeatOccupiedException, InvalidPassengerNameException
{
    Seat tSeat = airplane.getSeat(x,y);
    if (tSeat!=null)
    {
        if (passengerName.isEmpty() || !passengerName.matches("[a-zA-Z]+"))
        {
            throw new InvalidPassengerNameException();
        }
//excluded else if
    else if (foundPassenger(passengerName))
        {
                    airplane.seatList.get(airplane.seatNumber(passengerName)).unOccupy();   
                    tSeat.occupy();
                    for (int i = 0; i<passengers.size();i++)
                        if (passengers.get(i).getName().equals(passengerName))
                            passengers.get(i).changeSeat(tSeat.getSeatName());
        }
        else if (!tSeat.occupied)
        {
            tSeat.occupy();
            addPassenger(passengerName, tSeat.getSeatName());
        }
        else if (tSeat.occupied)
        {
            throw new SeatOccupiedException();
        }
    }
    if ( tSeat.occupied ) {
        throw new SeatOccupiedException();
    }

    if ( /* bad passenger name */ ) {
        throw new InvalidPassengerNameException();
    }

    if ( /* passenger does not exist */ ) {
        throw new PassengerNotFoundException();
    }

    /* assign Seat here */

检查是否有乘客需要在发现乘客后进行,因为如果发现乘客且座位已被占用,则没有问题改变最简单情况的逻辑。如果它工作正常,就给你的陈述增加复杂性。。。