首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用布尔值做一个选项>reserved<?

用布尔值做一个选项>reserved<?
EN

Stack Overflow用户
提问于 2015-01-26 21:12:12
回答 1查看 224关注 0票数 0

好吧,所以,我的程序“完成”到我不能解决这个简单的问题。

我拿到了这个:

代码语言:javascript
复制
package hotel;
import java.util.Scanner;
/**
*
* @author Defalt
*/
public class Hotel {

/**
 * @param args the command line arguments
 */
public static void main(String[] args) {
    Prices prices = new Prices();
    Scanner user_in = new Scanner(System.in);
    String method;
    boolean taken = false;
    boolean taken2 = false;
    boolean taken3 = false;
    boolean again = true;

    //***********Introduction to the hotel*************

    System.out.println("Welcome to Hotel Vermond's Heaven!");
    System.out.println("We are happy to see that you would like to stay with us.");

    //***********Creating of a Loop*************


    do {
    System.out.println("Please, type which room you would like to book: ");
    System.out.println("Single Bed, Double Bed, President Suit");
    method = user_in.nextLine();

    //***********Choices of Rooms and Question to book another one*************

    if ("Single Bed".equals(method)) {
            System.out.println(prices.describe1());
    if ("y".equals(user_in.nextLine())){
         if(taken=true){
                System.out.println("We are sorry, this room is already booked. Please choose another one");
            }else again=true;
    } else again=true;
        } else if ("Double Bed".equals(method)){
            System.out.println(prices.describe2());
    if ("y".equals(user_in.nextLine())){
            taken2 = true;
            again=true;
        } else again=true;
    } else if ("President Suit".equals(method)){
            System.out.println(prices.describe3());
    if ("y".equals(user_in.nextLine())){
            taken3 = true;
            again=true;
    } else again=true;

    } else {
            System.out.println("Please choose one of the rooms above.");
    }
            System.out.println("Would you like to book another Room(y/n)\n");

    //***********Outbreak if User declines another booking*************
    //***********Otherwise redo the whole process************* 

    if ("y".equals(user_in.nextLine())){
        again=true;
    } else{
        break;
    }
 }while(again);
    System.out.println("Thank you and goodbye!");

   }
}

我的另一堂课是:

代码语言:javascript
复制
package hotel;
import java.util.Scanner;
/**
*
* @author Defalt
*/
public class Prices {
Scanner user_in = new Scanner(System.in);
int price1 = 300;
int price2 = 800;
int price3 = 2500;

//***********Information of the Room including Validation Question*************

public String describe1() {  
       return
        "You Choose the Single Bed.\n\tThis room Contains 1 Bed, 1 Fridge a Bathroom but no View on the Ocean.\n\tThis room will cost CHF " + price1 + ".-.\n\tWould you like to book this room?(y/n)";
   }
public String describe2() {  
   return
    "You Choose the Double Bed.\n\tThis room Contains 1 Queen-size Bed, 1 Fridge a bathroom, an Icemaker but no View on the Ocean.\n\tThis room will cost CHF " + price2 + ".-.\n\tWould you like to book this room?(y/n)";
   } 
public String describe3() {  
   return
    "You Choose the President Suit.\n\tThis room Contains 1 King-size Bed, 1 Fridge, XXL Bathroom, Private Entertainment-System, 65inch Flatscreen and a Balcony with View on the Ocean.\n\tThis room will cost CHF " + price3 + ".-.\n\tWould you like to book this room?(y/n)";
   } 
}

正如你所看到的,在Single Bed被拿走后,我试着把它变成一个预定房间。然而,即使在第一次预订时,System.out.println("We are sorry, this room is already booked. Please choose another one");也会显示出来。

为什么即使我的taken布尔值的初始值是假的?还有什么其他的选择可以让我的想法发挥作用呢?

PS!:我想我第一次就让它工作了,但是不管我多少次关闭程序并重新启动它,它都保持了所获得的真值。(只是旁注)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-26 21:29:01

你需要改变

代码语言:javascript
复制
if(taken=true){
            System.out.println("We are sorry, this room is already booked. Please choose another one");

代码语言:javascript
复制
if(taken==true){
            System.out.println("We are sorry, this room is already booked. Please choose another one");

注意if条件下的双等于。这将检查taken的值,而不是总是将其设置为true,这就是当前正在发生的情况。

或者,由于taken已经是一个布尔值,所以可以将其简化为:

代码语言:javascript
复制
if(taken){
            System.out.println("We are sorry, this room is already booked. Please choose another one");

如果您修复了格式和缩进,它可能会帮助您捕捉这些问题。我倾向于避免在任何时候忽略花括号。这通常是java标准格式:

代码语言:javascript
复制
if(condition) {
    if(condition) {
        // do the thing
    }
    else {
        // do the other thing
    }
}
else if(condition) {
    // do another thing
}
else {
    // do the third thing
}

请注意,在同一嵌套级别上的ifs/else也是如何保持在相同的缩进级别上的。这对保持它们的直观性很有帮助。

编辑:

我想指出的另一件事是,您有again布尔值,但您没有使用它。如果用户完成了,则不要将break从循环中删除,而是使用您应有的again布尔值,并将其设置为false。这将导致循环条件失败并很好地退出循环。利用休息很难看。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28158860

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档