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