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