Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
验证Java类中的数据_Java - Fatal编程技术网

验证Java类中的数据

验证Java类中的数据,java,Java,主要问题: 每个航班都有一个编号(必须以字母EI开头,后跟3位数字)、航班旅行的一周中的一天、目的地和预订的座位数。每个航班还将承担标准责任,能够计算并返回航班上的免费座位数(假设每个航班最多有10个)。您应该利用您的想象力创建一个您认为有用的其他飞行责任(这也可能涉及创建一个或多个新数据项以支持该责任) 这就是我到目前为止所做的: public class Flight{ private String flightNo; private date day; priv

主要问题: 每个航班都有一个编号(必须以字母EI开头,后跟3位数字)、航班旅行的一周中的一天、目的地和预订的座位数。每个航班还将承担标准责任,能够计算并返回航班上的免费座位数(假设每个航班最多有10个)。您应该利用您的想象力创建一个您认为有用的其他飞行责任(这也可能涉及创建一个或多个新数据项以支持该责任)

这就是我到目前为止所做的:

public class Flight{


    private String flightNo;
    private date day;
    private String 
    private int numberOfBookedSeats;
    private int freeSeats=0;
    private int passengerMeals;
    private int mealsNeeded=0;

    public Flight(){

    }

    public Flight(String flightNo, date day,String destination,int numberOfBookedSeats,int passengerMeals ){
        this.flightNo= flightNo;
        this.day = day;
        this.destination= destination;
        this.numeberOfSeats= numberOfSeats;
        this.passengerMeals= passengerMeals;

    }

    public void setFlightNo(filghtNo f){
        flightNo= f;
    }

    public String getFlightNo() {
        return flightNo;
    }

    public void setDay(Day d) {
        day= d;
    }

    public int getDay(){
        return day;
    }

    public void setDestination(destination ds) {
        destination = ds;
    }

    public int getDestination(){
        return destination;
    }

    public void setNumeberOfSeats(numberOfSeats s){
        numberOfSeats= s;
    }

    public int getNumeberOfSeats(){
        return numeberOfSeats;
    }

    public void setPassengerMeals( passengerMeals pm){
        passengerMeals= pm;
    }

    public int getPassengerMeals(){
        return passengerMeals;
    }

    public int calculateFreeSeats(){
        int maxSeatsNumbers = 10;
        freeSeats = maxSeatsNumbers - numberOfBookedSeats;
        return freeSeats;
    }

    public int calculateMealsNeeded(){
        int staffMeals=5;
        passengerMeals= numberOfBookedSeats;
        mealsNeeded= staffMeals + passengerMeals;
        return mealsNeeded;
    }
}

如果希望战斗编号为字母数字,则
int
不是正确的数据类型,应使用
String
并验证是否可以将
String
方法与

您可以从以下内容开始:

class AirLine {
    List<Flight> flights = new ArrayList<>();
    public void addFlight(String flightNumber) {
        flights.add(new Flight(flightNumber));
    }
    public List<Flight> getFlights() {
        return flights;
    }
}

class Flight {
    String flightNumber;
    public Flight(String flightNumber) {
        setFlightNumber(flightNumber);
    }
    public String getFlightNumber() {
        return flightNumber;
    }
    public void setFlightNumber(String flightNumber) {
        if(flightNumber == null || ! flightNumber.matches("EI\\d{3}")) {
            throw new IllegalArgumentException("invalid flight number: " 
                    + flightNumber);
        }
        this.flightNumber = flightNumber;
    }
}
class航空公司{
List flights=new ArrayList();
public void addFlight(字符串flightNumber){
航班。添加(新航班(航班号));
}
公共列表getFlights(){
返程航班;
}
}
班机{
字符串flightNumber;
公共航班(字符串航班号){
设置flightNumber(flightNumber);
}
公共字符串getFlightNumber(){
返回航班号;
}
public void setFlightNumber(字符串flightNumber){
if(flightNumber==null | |!flightNumber.matches(“EI\\d{3}”)){
抛出新的IllegalArgumentException(“无效航班号:”
+航班号);
}
this.flightNumber=flightNumber;
}
}

您应该只创建一个
公共构造函数
,因为航班必须有
航班号
(必须是
字符串
)。 此外,我还要在构造器的主体上检查以下内容:

if (!flightNumber.matchs("^EI\d{3}$")) {
    throw new IllegalArgumentException("Invalid Flight number format.");
}
flightNo = flightNumber;
public class AerLingusFlightNumber extends FlightNumber {

    public AerLingusFlightNumber(int flightId) {
        super("EI", flightId);
    }
}

int
不是存储航班号的正确类别,因为它不允许指定前缀字符或宽度。您可以将其存储为
字符串
,这将允许使用前缀,然后对数字部分进行验证和填充,但我要做的是创建一个新类型来表示航班号

这封装了用于从前缀
字符串
&
int
生成航班号的逻辑,使其更易于维护,因为验证逻辑只在一个地方,它使代码更容易理解,因为您的
航班
类不再需要包含生成
字符串
航班号的逻辑。它的使用也更加清晰,因为如果你有一个
私人final FlightNumber FlightNumber
成员,你可以在
字符串中使用它,比如
“航班号是”+FlightNumber

有关此类型的外观,请参见以下内容:

请注意,这个特定的实现使用了-如果您还没有使用它,那么可能不值得仅仅为此导入它,所以您可以自己使用
String.format(“%03d”,…)
或类似的方法来实现一个等价的实现,但是如果您有番石榴,我认为它看起来更干净

以及:


那么,您还希望代码做什么?如果你问一个特定的问题,StackOverflow的效果会更好。你想验证“flightNo”吗?这就是问题所在?我不知道如何以EI格式创建数字,然后再加上3位数字。我想知道如何在类flightIllegalArgumentException中对其进行编码,这可能是一个比原始异常更好的选择。或者,定义一个特定的异常可能会使运行时出错的地方更清楚。@RichardMiskin,谢谢,编辑了我的答案。(很长一段时间没有在
Java
上写任何东西。)是否值得在构造函数中包含flightId的范围检查?您当前的代码将接受1000,这将不符合要求。当然,很抱歉-错过了!
public class AerLingusFlightNumber extends FlightNumber {

    public AerLingusFlightNumber(int flightId) {
        super("EI", flightId);
    }
}
public class BritishAirwaysFlightNumber extends FlightNumber {

    public BritishAirwaysFlightNumber(int flightId) {
        super("BA", flightId);
    }
}