Java 在一个if语句中处理多个异常
我在抛出和捕获异常方面有困难 下面是assignSeat()的代码,assignSeat是在另一个类的try块中调用的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
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 */
检查是否有乘客需要在发现乘客后进行,因为如果发现乘客且座位已被占用,则没有问题改变最简单情况的逻辑。如果它工作正常,就给你的陈述增加复杂性。。。