【发布时间】:2021-02-08 11:00:40
【问题描述】:
我对 java 很陌生,但我对 c++ 和 python 有很好的经验。所以,我正在做一个问题,我需要实施一个飞机预订系统,它执行以下操作 -
1.将所有座位初始化为未占用(false)
2.询问输入(生态或头等舱)
3.检查座位是否未被占用
4.如果座位没有被占用分配座位,否则寻找下一个座位
5.如果经济舱已订满,询问用户是否想升到头等舱
6.如果用户是否定的显示消息“下一个飞机在 3 小时内”
但是,
package oop;
import java.util.Arrays;
import java.util.Scanner;
public class AirplaneBooking {
private final static int MAX_ECO_SEATS = 5;
private final static int MAX_FIRST_CLASS_SEATS = 3;
private final static boolean[] ECO_SEATS = new boolean[MAX_ECO_SEATS];
private final static boolean[] FIRST_CLASS_SEATS = new boolean[MAX_FIRST_CLASS_SEATS];
private static int current_eco_seat = 0;
private static int current_first_class_seat = 0;
public static void initialilze_seats(boolean[] first_class_seats, boolean[] eco_class_seats){
Arrays.fill(first_class_seats, Boolean.FALSE);
Arrays.fill(eco_class_seats, Boolean.FALSE);
}
public static void display(boolean[] seats){
System.out.print("[");
for(boolean seat : seats){
System.out.print(seat + ",");
}
System.out.println("]");
}
public static void book_seat(boolean [] seats, int current_seat){
seats[current_seat] = true;
current_seat++;
System.out.println(current_seat);
}
public static int user_input() {
Scanner input = new Scanner(System.in);
System.out.print("Enter 1 for Economy class or 2 for First class : ");
int user_seat_prefrence = input.nextInt();
if (user_seat_prefrence == 1){
if(current_eco_seat < MAX_ECO_SEATS){
book_seat(ECO_SEATS, current_eco_seat);
}
else{
System.out.println("Looks like eco seats are full, would you like to book for first class insted(1/0) ?");
Scanner next_input = new Scanner(System.in);
int user_next_seat_prefrence = next_input.nextInt();
if (user_next_seat_prefrence == 1){
book_seat(FIRST_CLASS_SEATS, current_first_class_seat);
user_seat_prefrence = 2;
}
else{
System.out.println("next flight leaves in 3 hrs");
}
}
}
else if (user_seat_prefrence == 2){
if (current_first_class_seat < MAX_FIRST_CLASS_SEATS){
book_seat(FIRST_CLASS_SEATS, current_first_class_seat);
}
else{
System.out.println("Looks like first class seats are full, would you like to book economy instead?(1/0)");
int user_next_seat_prefrence = input.nextInt();
if (user_next_seat_prefrence == 1){
book_seat(ECO_SEATS, current_eco_seat);
user_seat_prefrence = 1;
}
else{
System.out.println("Next flight leaves in 3hrs");
}
}
}
else {
System.out.println("Enter valid option");
}
return user_seat_prefrence;
}
public static void print_boarding_pass(int user_seat_prefrence){
if (user_seat_prefrence == 1){
System.out.println("eco");
System.out.println(current_eco_seat - 1);
}
else{
System.out.println("first class");
System.out.println(current_first_class_seat - 1);
}
}
public static void main(String args[]){
initialilze_seats(FIRST_CLASS_SEATS, ECO_SEATS);
display(FIRST_CLASS_SEATS);
display(ECO_SEATS);
while(true){
int user_seat_prefrence = user_input();
print_boarding_pass(user_seat_prefrence);
display(FIRST_CLASS_SEATS);
display(ECO_SEATS);
System.out.print("book another seat:");
Scanner choice = new Scanner(System.in);
boolean book_another_seat = choice.nextBoolean();
if (book_another_seat == false)
break;
}
}
}
我遇到此代码的问题是如果生态舱的座位(例如)已满,程序应该询问我是否要预订头等舱并等待我的输入,如果我按下1 它应该在头等舱预订,但程序不会等待我的输入,而是转到 else 语句。
另外,我使用static 变量current_eco_seat 和current_first_class_seat 来跟踪当前预订的座位,并将该静态变量传递给book_seat 函数,然后程序预订座位并递增current_eco_seat 或 current_first_class_seat(取决于通过的)以便可以在下一次互动中预订下一个座位。但是静态变量根本不会增加。
这些是我对程序唯一的问题。
感谢任何帮助,谢谢
【问题讨论】:
-
Java 是按值传递原语的,因此您的 book_seat 方法会增加它自己的 current_seat 变量。你的静态变量没有改变。如果你想增加你的静态变量直接做; current_eco_seat++;。不需要通过 book_seat 方法发送。
-
如果你真的想模仿C的指针语义,你可以将你的静态变量作为单元素数组(
int[]),将它传递给函数,然后增加数组内的元素。但它不是 Java 中的模式。 -
被认为有害的静态变量
标签: java arrays while-loop static boolean