刚开始学习java,模拟酒店管理系统的一道题遇到点问题!请大神帮吗看看一下是哪里错了!

以下是一个测试类!

package 数组.作业3;

import java.util.Scanner;

public class Test {

    static Hotel h = new Hotel();
    public static void main(String[] args) {

System.out.println("《《《《《《《《《《《《欢迎光临大酒店》》》》》》》》》》》》");
        while (true) {
            Scanner scanner = new Scanner(System.in);
            System.out.println("1.查看酒店的房间及状态;2.定房间;3.退房;4.退出系统");
            System.out.print("请输入数字选择你需要的服务:");
            
            while (true) {
                if (scanner.hasNextInt()) {
                    int no = scanner.nextInt();
                    if (no >= 1 && no <= 4) {
                        checkServices(no);
                        System.out.println();
                        break;
                    } else {
                        System.out.println("输入错误,请重新输入!");
                        System.out.println("1.查看酒店的房间的示意图;2.定房间;3.退房;4.退出系统");
                        System.out.print("请输入数字选择你需要的服务:");
                        continue;
                    }
                } else {
                    System.out.println("输入格式有误:应输入数字为:1~5");
                    System.out.println("1.查看酒店的房间的示意图;2.定房间;3.退房;4.退出系统");
                    System.out.print("请输入数字选择你需要的服务:");
                    scanner.next();
                }
            }
        }

        

    }
    public static void checkServices(int no) {
        
        switch (no) {
        case 1:
//查看酒店的房间及状态
            
            h.roomList();
            break;
        case 2:
//订房
            
            h.reservation(true);
            break;
        case 3:
//退房
            h.reservation(false);
            break;

        case 4:
//退出
            System.out.println("期待您下次使用!");
            System.exit(0);
            break;
        }
    }



}

以下是房间类

public class Room {

    private String no;
    private String type;//标准间,双人间,豪华间
    private boolean isUse;
    
    public String getNo() {
        return no;
    }

    public void setNo(String no) {
        this.no = no;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public boolean isUse() {
        return isUse;
    }

    public void setUse(boolean isUse) {
        this.isUse = isUse;
    }

    public Room() {
        super();
    }

    Room(String no, String type,boolean isUse){
        this.no= no;
        this.type = type;
        this.isUse = isUse;
    }
    
    public String toString() {
        return "    【房号】:"+ no + "  【类型】:"+type+"  【状态】:"+(isUse?" 已入住   ":"  空闲  ");
    }
}

以下是酒店类

import java.util.Scanner;

/*
 * 规定酒店:5层,每层10个房间
 *     1.2层是标准件
 *     3.4层是双人间
 *     5 层是豪华间
 */
public class Hotel {

    Room[][] rooms;

    //初始化房间
    Hotel() {
        rooms = new Room[5][10];
        for (int i = 0; i < rooms.length; i++) {

            for (int j = 0; j < rooms[i].length; j++) {
                if (i == 0 || i == 1) {
                    rooms[i][j] = new Room((i + 1) * 1000 + (j + 1) + "", "标准间", false);
                }
                if (i == 2 || i == 3) {
                    rooms[i][j] = new Room((i + 1) * 1000 + (j + 1) + " ", "双人间", false);
                }
                if (i == 4) {
                    rooms[i][j] = new Room((i + 1) * 1000 + (j + 1) + " ", "豪华间", false);
                }

            }

        }

    }

    // 对外提供查看房间列表
    public void roomList() {
        for (int i = 0; i < rooms.length; i++) {
            for (int j = 0; j < rooms[i].length; j++) {
                System.out.print(rooms[i][j]);
            }
            System.out.println();
        }
    }

    // 提供对外预定及退房方法
    public void reservation(boolean a) {

        Scanner scanner = new Scanner(System.in);
        outer: while (true) {
            System.out.print("请输入房间号:");
            if (scanner.hasNextInt()) {
                String no = (scanner.next());
                inner: for (int i = 0; i < rooms.length; i++) {
                    for (int j = 0; j < rooms[i].length; j++) {
                        if (rooms[i][j].getNo().equals(no)) {
                            if (a) {
                                if (rooms[i][j].isUse()) {
                                    System.out.println("手慢了,房间已经被预定啦!");
                                    continue outer;

                                } else {
                                    rooms[i][j].setUse(true);
                                    System.out.println("房间订好啦,祝您入住愉快!");
                                    break outer;
                                }
                            } else {
                                if (rooms[i][j].isUse()) {
                                    rooms[i][j].setUse(false);
                                    System.out.println("房间已经退了,欢迎下次光临!");
                                    break outer;
                                } else {
                                    System.out.println("房间没有人入住!");
                                    continue outer;
                                }
                            }
                        }

                    }

                }
                
                System.out.print("没有这个房间,请查证后重新输入!");
            } else {
                System.out.println("输入房间号格式错误!");
                scanner.next();
            }
        }
    }

}

以上是代码!

问题是现在我只能输入1层和2层的房间号

如果想预定3层或以上的房间,就匹配不上了!

求大神指点一下!



猜你喜欢

转载自www.cnblogs.com/Alienstone/p/12419699.html