我几个星期以来一直在学习Java,所以很抱歉你们很多人会解决这个问题。它一直困扰着我的大脑。
以下是指示“Online Book Depot为每位购买5本或更多书籍的客户提供1本免费书籍,并且每购买8本或更多书籍,均可提供2本免费书籍。 每次购买7本或更多书籍时,它为普通客户提供1本免费书籍,每购买12本或更多书籍,可提供2本免费书籍。 编写基于布尔变量isPremiumCustomer和int变量nbooksPurchased“
的值,为freeBooks分配适当值的代码块代码编译没有错误,但结果不正确......帮助!
boolean isPremiumCustomer = false;
int freeBooks = 0;
Scanner scanner = new Scanner(System.in);
System.out.println("Enter the no of books:");
int nbooksPurchased = scanner.nextInt();
System.out.println("is Premium customer?(y/n):");
String ans = scanner.next();
if (ans.equals("y") || ans.equals("Y") && (nbooksPurchased >4 && (nbooksPurchased <8))) {
isPremiumCustomer = true;
freeBooks = 1;
}else if (ans.equals("y") || ans.equals("Y") && (nbooksPurchased >=8 )) {
isPremiumCustomer = true;
freeBooks = 2;
}else if (ans.equals("n") || ans.equals("N") && (nbooksPurchased >=7 && (nbooksPurchased <=11))) {
freeBooks = 1;
}else if (ans.equals("n") || ans.equals("N") && (nbooksPurchased >=12 )){
freeBooks = 2;
}
System.out.println("Free Books:" + freeBooks);
答案 0 :(得分:1)
如果您在评论中尝试阅读自己的代码,我理解您的挫折感。 ;-)这几乎不可能。您可以编辑您的问题并在那里输入新的格式化代码。当我格式化它时,我得到:
if (ans.equals("y") || ans.equals("Y")) {
isPremiumCustomer = true;
}
if (nbooksPurchased >= 3 && (nbooksPurchased <= 7)) {
freeBooks = 1;
} else if (nbooksPurchased >= 8) {
freeBooks = 2;
}
if (ans.equals("n") || ans.equals("N")) {
if ((nbooksPurchased >= 7 && (nbooksPurchased <= 11))) {
freeBooks = 1;
} else if (nbooksPurchased >= 12) {
freeBooks = 2;
}
}
现在你显然已经开始了!这个问题的主要问题是中间if-else构造if (nbooksPurchased >= 3 && (nbooksPurchased <= 7)) {
是为所有客户执行的,而不仅仅是高级客户。因此,购买3或6本书籍的普通客户可以获得只有高级客户应该购买的1本免费书籍。如果他们购买7或更多,执行进入if (ans.equals("n") || ans.equals("N")) {
,你就被保存了。
另一个问题只是一个错字,nbooksPurchased >= 3
对于高级客户来说应该是5。
所以我相信大多数案例都能正常运作。
我认为这会更清楚(因此更容易纠正错误):
if (isPremiumCustomer) {
// put if-else for premium customers here
} else {
// put if-else for regular customers here
}
此外,我认为这将更好地满足要求:
编写为freeBooks分配适当值的代码块 基于布尔变量isPremiumCustomer和...
的值
(我的重点)。我希望你能成功通过它。