[英]Basic Java exercise - Help needed
這是說明
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);
在評論中閱讀您自己的代碼幾乎是不可能的。 當我格式化它時,我得到:
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
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.