java - 如何检查数组是否有足够的位置来接受 Java 中数组的新值?

标签 java arrays string if-statement

我正在创建一个商业航空公司的飞行程序,而且我是 Java 的业余爱好者(每天都在学习新事物)。所以,我有一个名为 seats 的字符串数组,这个数组中的每个位置对应于航类的一个可用座位。最初这些座位都是空的。

String[] seats = new String[8];

从长远来看,这个程序将向这个数组中插入值,我的问题是如何检查这个数组中是否有足够的座位或位置来接受新乘客为他们分配座位?另外,如果没有可用的座位,我希望我的程序显示一条错误消息,并且不向组中的任何人分配座位。 这是我到目前为止的想法,

for(int i=0; i< seats.length-1;i++) {
   if(seats[i] != null) {
     do something;
   } else {
       system.out.println("No seats available");
       (how do I not assign seats or accept more values to my array?)
   }
}

您认为我使用这段代码的方向正确吗?如果没有,更正/贡献会有所帮助。如果航类没有空位或空位,我该如何指示程序不分配座位?

最佳答案

您的代码几乎是正确的。但对于“没有座位”可能并不正确。只有当你从一开始就占据座位时,这才会起作用。您的应用程序可能会扩展,所以我宁愿使用如下所述的内容,其中 addPassenger 方法在插入成功时返回 true,否则返回 false。:

private static int MAX_SEATS = 8;
private String[] seats = new String[MAX_SEATS];

public boolean addPassenger(String passengerName) {
    for (int i = 0; i < seats.length; i++) {
        if (seats[i] == null) {
            seats[i] = passengerName;
            return true;
        }
    }
    return false;
}

无论如何,最后我会建议您使用更客观的方法来实现进一步的可扩展性。我的意思是使用 Passenger、Seat、Plane 类。像这样的东西:

public class Plane {

    private Seat[] seats;

    public Plane(int capacity) {
        this.seats = new Seat[capacity];
        for (int i = 0; i < seats.length; i++) {
            seats[i] = new Seat();
        }
    }

    public boolean addPassenger(Passenger passenger) {
        for (Seat seat : seats) {
            if (!seat.isOccupied()) {
                seat.setPassenger(passenger);
                return true;
            }
        }
        return false;
    }

    public boolean addPassengers(Passenger... passengers) {
        if (passengers == null) {
            throw new IllegalArgumentException("Passengers cannot be null");
        }
        if (!hasFreeSeats(passengers.length)) {
            return false;
        } else {
            for (Passenger passenger : passengers) {
                addPassenger(passenger);
            }
            return true;
        }
    }

    private boolean hasFreeSeats(int count) {
        int seatsNeeded = count;
        for (Seat seat : seats) {
            if (!seat.isOccupied()) {
                seatsNeeded--;
            }
            if (seatsNeeded == 0) {
                return true;
            }
        }
        return false;
    }

}

public class Seat {

    private Passenger passenger;

    public boolean isOccupied() {
        return passenger != null;
    }

    public void setPassenger(Passenger passenger) {
        this.passenger = passenger;
    }

    // getter for passenger and other fields   
}

public class Passenger {

    private final String name;

    public Passenger(String name) {
        this.name = name;
    }

    // getter for name and other fields
}

请注意,我使用的是 Java 7 语言级别,因为它可能更容易让您理解。如果我将 Java 8 流 API 用于集合,代码会稍微小一些。

关于java - 如何检查数组是否有足够的位置来接受 Java 中数组的新值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32832656/

相关文章:

java - 如何返回 DataSnapshot 值作为方法的结果?

具有自定义类的 C++ 动态二维数组

启动 Jboss 时出现 java.io.FileNotFoundException(文件名、目录名或卷标语法不正确)

Java - 在循环中打印逗号

java - 逐位比较两个 4 位整数

java - 字符串子序列的查询

string - Hadoop中文本和字符串的区别

c++ - 什么时候应该使用字符串而不是字符串流?

java - 如何仅在使用spring单击java中的提交按钮后才转到下一页

php - 我怎样才能使这个功能更简单?未知的数组深度