2

例外のスローとキャッチに問題があります。

これが 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();
        }
    }

そして、これが assignSeat() を呼び出し、別のクラスにあるコードです (見やすくするためにクラス全体をコピーしません)。

if (afComp.currentAF != null)
            {
                try
                {
                    afComp.currentAF.assignSeat(nameField.getText(), x, y); //<-Problem here, "Unhandled exception type SeatOccupiedException"
                }
                catch (SeatOccupiedException exception) //<-Problem here, "Unreachable catch block, This exception is never thrown from the try statement body"
                {

                }
                catch(InvalidPassengerNameException exception) //<-No problems.
                {

                }
            }

try ブロックの何が問題になっていますか? なぜSeatOccupiedExceptionをスローしないのですか?

例外クラス:

占有された座席:

package a2;

public class SeatOccupiedException extends Exception
{
    public SeatOccupiedException(){}
}

無効な乗客名:

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.*;

assignSeatを持つクラスのインポート

package a2;
import java.util.ArrayList;
4

2 に答える 2

2

ほとんどの場合SeatOccupiedException、2 つの異なるパッケージに 2 つのクラスがあり、メソッドが一方のパッケージからクラスをスローし、コードが他方のクラスをキャッチします。

于 2012-04-13T22:15:24.270 に答える
0

ロジックを変更してステートメントを簡素化します。

    if ( tSeat.occupied ) {
        throw new SeatOccupiedException();
    }

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

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

    /* assign Seat here */
于 2012-04-13T22:48:57.423 に答える