Java 客房预订计划

Java 客房预订计划,java,Java,我是Java新手,我试图编写一个简单的房间预订程序 以下是我的计划: 将有一个叫做预订的课程。它会要求用户输入房间ID以预订房间,用户可以按x键终止程序 我想上另一门课叫RoomDB。我将使用arraylist存储房间ID 我想我也需要构造函数,所以我有另一个类叫做Room 我的想法是当程序运行时,它将显示可用的房间ID供用户选择。如果用户输入的房间ID不正确,程序将显示错误消息并要求用户再次输入 如果用户输入了正确的房间ID并且房间ID可用,它将向用户显示一条成功消息 如果用户输入了正确的房间

我是Java新手,我试图编写一个简单的房间预订程序

以下是我的计划:

将有一个叫做预订的课程。它会要求用户输入房间ID以预订房间,用户可以按x键终止程序

我想上另一门课叫RoomDB。我将使用arraylist存储房间ID

我想我也需要构造函数,所以我有另一个类叫做Room

我的想法是当程序运行时,它将显示可用的房间ID供用户选择。如果用户输入的房间ID不正确,程序将显示错误消息并要求用户再次输入

如果用户输入了正确的房间ID并且房间ID可用,它将向用户显示一条成功消息

如果用户输入了正确的房间ID,并且房间ID已经预订,它将要求用户再次输入

这就是我的想法,我开始写代码

这是我的三个类的代码

Booking.java

package test;

import java.util.Scanner;

public class Booking 
{
static RoomDB roomDB = new RoomDB();

public static void main(String[] args) {
    String roomID;      
    Room room;  
    Scanner inputID = new Scanner(System.in);

        while(true){

            System.out.println("Please choose the room you want to book \n"+getRoomList(roomDB));

            while(true){
                roomID = inputID.nextLine();
                if(roomID.equals ("x")){
                    break;
                }

                if(getRoom(roomID) == null){

                    System.out.println("The room ID is incorrect, please enter again or enter x to quit");

                }
                else{

                    room = getRoom(roomID);

                    if(!room.isBooked()){
                        System.out.println("Book successfully");
                        break;
                    }
                    else{
                        System.out.println("please enter the room ID again or enter x to quit");
                    }
                }

            }

        }

    }

public static String getRoomList(RoomDB roomDB)
{

    String roomList = "";
    for(Room r:roomDB.getRoom())
    {

        if(!r.isBooked())
        {
            roomList = roomList+r.getRoomID()+" is free"+"   ";
        }
        else
        {
            roomList = roomList+r.getRoomID()+" has been booked ";
        }

    }
    return roomList;
}


public static Room getRoom(String roomID){

    for(Room r:roomDB.getRoom()){

        if(r.getRoomID()==roomID){

            return r;

        }

    }
    return null;

}
}
RoomDB.java

package test;

import java.util.ArrayList;

public class RoomDB 
{
private ArrayList<Room> room;
private String[] roomID = {"Room1","Room2"};

RoomDB(){

    room = new ArrayList<Room>();                     
    for(int i=0;i<roomID.length;i++)
    {
        addRoom(new Room(roomID[i]));
    }

}

public void addRoom(Room addRoom){
    room.add(addRoom);
}

public ArrayList<Room> getRoom(){
    return room;
}
}
我检查没有语法错误,但程序无法正常运行

问题是程序不断要求用户输入房间ID,即使房间ID是正确的。例如,当用户进入Room1时,程序仍然要求输入

我想知道是哪一类导致了这个问题

如果有人能就这个问题提出建议,我将不胜感激

public static Room getRoom(String roomID){

for(Room r:roomDB.getRoom()){

    if(r.getRoomID().equals(roomID)){ //Old : r.getRoomID()==roomID

        return r;

    }

}
return null;

}

对于比较字符串,请始终使用equals。

从外观上看,当您将字符串与“==”运算符进行比较时,问题就出现了。这是不可能的,因为“==”操作符试图识别两个对象是否相等,而不是它们各自的值。您可以在此处更好、完整地解释字符串比较的工作原理:

要快速正确地解决您的问题,只需使用:

if(r.getRoomID().equals(roomID))
{ 
    return r;
}

我还建议您在相同的情况下比较字符串(在Booking.java中的两个位置):

而且

if (r.getRoomID().equalsIgnoreCase(roomID))

希望对您有所帮助。

这是一个完美的答案,请看下面的代码,复制它并运行,请删除并根据需要修改您的包/类名

分配房间后忘记设置true,如果房间似乎空闲,则分配并将其标记为BOOKED->true

package roombooking;

import java.util.ArrayList;
import java.util.Scanner;

class Room 
{
    private String roomID  = null;
    private boolean booked = false;

    Room(String roomID)
    {
        this.roomID = roomID;
    }

    String getRoomID()
    {
        return roomID;
    }

    void cancel()
    {
        booked = false;
    }


    boolean isBooked()
    {
        return booked;
    }

    public void setBooked(boolean booked) {
        this.booked = booked;
    }


}

class RoomDB 
{
    private ArrayList<Room> room;
    private String[] roomID = {"Room1","Room2"};

    RoomDB(){

        room = new ArrayList<Room>();                     
        for(int i=0;i<roomID.length;i++)
        {
            addRoom(new Room(roomID[i]));
        }

    }

    public void addRoom(Room addRoom){
        room.add(addRoom);
    }

    public ArrayList<Room> getRoom(){
        return room;
    }
}

public class Booking {

    static RoomDB roomDB = new RoomDB();

    public static void main(String[] args) {
        String roomID;      
        Room room;  
        Scanner inputID = new Scanner(System.in);

        while(true){

            System.out.println("Please choose the room you want to book \n"+getRoomList(roomDB));

            while(true){
                System.out.println("Enter your Room no. : (Enter x for quite ) : ");
                roomID = inputID.nextLine();
                System.out.println("X : " + roomID.equals("x"));
                if(roomID.equals("x")){
                    System.out.println("Break");
                    break;
                }

                if(getRoom(roomID) == null){

                    System.out.println("The room ID is incorrect, please enter again or enter x to quit");

                }
                else{

                    room = getRoom(roomID);

                    if(!room.isBooked()){
                        System.out.println("Book successfully");
                        room.setBooked(true);
                        break;
                    }
                    else{
                        System.out.println("please enter the room ID again or enter x to quit");
                    }

                }

            }

        }

    }

    public static String getRoomList(RoomDB roomDB)
    {

        String roomList = "";
        for(Room r:roomDB.getRoom())
        {

            if(!r.isBooked())
            {
                roomList = roomList+r.getRoomID()+" is free"+"   ";
            }
            else
            {
                roomList = roomList+r.getRoomID()+" has been booked ";
            }

        }
        return roomList;
    }


    public static Room getRoom(String roomID){

        for(Room r:roomDB.getRoom()){

            if(r.getRoomID().equals(roomID)){
                System.out.println("r.getRoomID : " + r.getRoomID() + "  AND user.roomID :" + roomID);
                return r;
            }

        }
        return null;

    }

}

}

您正在将字符串与
==
中的if(r.getRoomID()==roomID)进行比较。如果您将其更改为
If(r.getRoomID().equals(roomID))
,则它确实有效。Hello@Kevin Esche,感谢您的回复,使用您的建议后,代码现在可以工作了。非常感谢。您好@Shiladittya Chakraborty,谢谢您的回复,在使用您的建议后,代码现在可以工作了。非常感谢。不,等等,我还有疑问。等等,我给你完整的答案。@VishalJGajera先生,有什么疑问吗?@Shiladittya,我发布完整代码,看看。我想我观察到,在成功分配房间后,它仍然显示它是免费的,这是我在我的代码中做的。您好@Phantomazi,谢谢您的回复,使用您的建议后代码现在可以工作了。非常感谢。不客气,@初学者!如果您对此或任何其他答案感到满意,请投票并接受您认为最适合您的答案,以便StackOverflow社区知道这里已经给出了答案。请注意,您需要15分钟才能接受答案。您好@Husman,谢谢您的回复。我试过你的建议,效果很好。因此,无论用户输入大写或小写,程序都将接受输入。非常感谢。您好@Vishal J Gajera先生,谢谢您的回复。我运行了您的代码,它工作正常。非常感谢你。我可以问你一个关于代码的问题吗?当我运行它时,我输入房间号,例如Room1,然后按enter键。我看到有一个for循环,但我不明白为什么程序会显示“r.getRoomID:Room1和user.roomID:Room1”两次?谢谢你,嘿,@初学者,程序显示“r.getRoomID:Room1和user.roomID:Room1”两次,首先,我想说-这是我添加的,因为调试的目的没有包含在你的代码中,第二,它来了两次,因为它是从2位调用的,1)if(getRoom(roomID)==null){…2)来自else块,room=getRoomID(roomID);我希望你现在能明白这个答案。@vishalgajera这是个完美的答案,请看下面的代码:为什么你的答案中有东西?请解释一下逻辑/问题/OP做错了什么..只需复制和粘贴答案就帮不上SO的未来访客..@VirajNalawade我很感激你的想法。让我纠正一下。
if (r.getRoomID().equalsIgnoreCase(roomID))
package roombooking;

import java.util.ArrayList;
import java.util.Scanner;

class Room 
{
    private String roomID  = null;
    private boolean booked = false;

    Room(String roomID)
    {
        this.roomID = roomID;
    }

    String getRoomID()
    {
        return roomID;
    }

    void cancel()
    {
        booked = false;
    }


    boolean isBooked()
    {
        return booked;
    }

    public void setBooked(boolean booked) {
        this.booked = booked;
    }


}

class RoomDB 
{
    private ArrayList<Room> room;
    private String[] roomID = {"Room1","Room2"};

    RoomDB(){

        room = new ArrayList<Room>();                     
        for(int i=0;i<roomID.length;i++)
        {
            addRoom(new Room(roomID[i]));
        }

    }

    public void addRoom(Room addRoom){
        room.add(addRoom);
    }

    public ArrayList<Room> getRoom(){
        return room;
    }
}

public class Booking {

    static RoomDB roomDB = new RoomDB();

    public static void main(String[] args) {
        String roomID;      
        Room room;  
        Scanner inputID = new Scanner(System.in);

        while(true){

            System.out.println("Please choose the room you want to book \n"+getRoomList(roomDB));

            while(true){
                System.out.println("Enter your Room no. : (Enter x for quite ) : ");
                roomID = inputID.nextLine();
                System.out.println("X : " + roomID.equals("x"));
                if(roomID.equals("x")){
                    System.out.println("Break");
                    break;
                }

                if(getRoom(roomID) == null){

                    System.out.println("The room ID is incorrect, please enter again or enter x to quit");

                }
                else{

                    room = getRoom(roomID);

                    if(!room.isBooked()){
                        System.out.println("Book successfully");
                        room.setBooked(true);
                        break;
                    }
                    else{
                        System.out.println("please enter the room ID again or enter x to quit");
                    }

                }

            }

        }

    }

    public static String getRoomList(RoomDB roomDB)
    {

        String roomList = "";
        for(Room r:roomDB.getRoom())
        {

            if(!r.isBooked())
            {
                roomList = roomList+r.getRoomID()+" is free"+"   ";
            }
            else
            {
                roomList = roomList+r.getRoomID()+" has been booked ";
            }

        }
        return roomList;
    }


    public static Room getRoom(String roomID){

        for(Room r:roomDB.getRoom()){

            if(r.getRoomID().equals(roomID)){
                System.out.println("r.getRoomID : " + r.getRoomID() + "  AND user.roomID :" + roomID);
                return r;
            }

        }
        return null;

    }

}
if(!room.isBooked()){
System.out.println("Book successfully");
room.setBooked(true); // this line does, booked room, after booked once it won't assign to any one else.
break;