[英]Java program producing incorrect output. (while-loop)
我用於顯示購買筆記本電腦訂單摘要的程序使用 (1)while 循環來處理多台筆記本電腦,使用 (2)if-else 來獲取筆記本電腦名稱/價格; 或錯誤消息“無效的選擇。再試一次”。 a (3)嵌套如果要弄清楚筆記本電腦的選擇何時有效,再進行rest的處理。 以及 (4) 嵌套的 if 僅在購買筆記本電腦時打印訂單摘要。
當我在選項中輸入一個無效數字(如 8)時,if 語句仍然執行,而不是它下面的 else。
當我在選項中輸入一個有效數字時,它會詢問數量,但是當我輸入一個數量時,我如何將該用戶輸入添加到訂單摘要而不是程序返回到循環的頂部?
我對 Java 很陌生,我的代碼應該如何生成正確的 output?
這是我擁有的當前代碼(JAVA)
public static void main(String[] args) {
char cont='Y';
int qty=0;
int trigger=0;
double total=0;
double subtotal=0;
double tax=0;
double price;
double lineItem=0;
String orderSummary=" ";
String laptop=" ";
Scanner input = new Scanner(System.in);
Calendar dateTime = Calendar.getInstance();
//Displays a list of laptops with prices and asked user for their choice. Prompt #1
int choice = 0;
while (choice >= 0) {
System.out.printf("%nTOP LAPTOPS OF %tY"
+ "%n%n1. %-23s %7s $%,9.2f"
+ "%n2. %-23s %8s %,9.2f"
+ "%n3. %-23s %8s %,9.2f"
+ "%n4. %-23s %8s %,9.2f"
+ "%n5. %-23s %8s %,9.2f"
+ "%n%nEnter your choice: ",
dateTime,
"HP Envy 13", " ", 799.99,
"Asus ZenBook 13 UX333FA", " ", 849.99,
"Dell XPS 13", " ", 989.99,
"Alienware Area 51-m", " ", 1999.99,
"Razer Blade Stealth", " ", 1299.00);
choice = input.nextInt();
if (choice < 6 || choice > 0) {
System.out.printf("Enter the quantity:");
qty = input.nextInt();
} else {
System.out.printf("Invalid choice! Try again.%n%n");
System.out.printf("Enter 'Y' to add a laptop to your purchase or 'N' to exit: ");
cont = input.next().charAt(0);
}
if (cont == 'Y') {
continue;
}
if (cont == 'N') {
System.exit(0);
}
//The following if-else prints a $ sign for the first line item
if (trigger == 1) {
orderSummary += String.format("%n%, -9d %-30s %8s $%,17.2f", qty, laptop, " ", lineItem);
trigger = 0;
} //End else for no $ sign
//The following statement prints the order summary of the laptops purchased.
//This should be done when there are no more laptops to process
if (choice > 0) {
if (choice < 6) {
tax = subtotal * .0825;
total = subtotal + tax;
orderSummary += String.format("%n%n%34s Subtotal %6s %,17.2f"
+ "%n%31s Tax @ 8.25%% %6s %,17.2f"
+ "%n%n%37s TOTAL %5s $%,17.2f%n",
" ", " ", subtotal,
" ", " ", tax,
" ", " ", total);
System.out.printf("%s", orderSummary);
break;
} //End if valid choice range ends print order summary
} //End if valid choice range begins
}
}
因為語句規則 AND (&&) OR (&&) 對應於 boolean 代數。
if (choice < 6 ||choice > 0) 對應於 'ifchoice is <8' 為 True 或如果 'choice > 0' 為真,則整個表達式為真
例如選擇 8 它將是 TRUE 所以不會發生
試試 if (選擇 > 0 && 選擇 <6)
然后思考“業務邏輯”,准備存儲和重用,組織你的變量進行計算,請看下面的例子
import java.util.*;
public class Example{
public static void main(String[] args) {
String [] product = {"HP Envy 13","Asus ZenBook 13 UX333FA","Dell XPS 13","Alienware Area 51-m","Razer Blade Stealth"};
double [] unit_rate = {799.99, 849.99, 989.99, 1999.99, 1299.00};
int [] user_selectected_qty = new int [product.length];
double total = 0;
boolean again = true;
Scanner input = new Scanner(System.in);
int choice,qty;
while (again)
{
System.out.println("TOP LAPTOPS");
for(int i=1; i<product.length ; i++)
System.out.println(""+i+".\t"+product[i]+"\t\t\t"+unit_rate[i]);
System.out.println("Enter your choice:");
choice = input.nextInt();
// SELECTION PROCESS
if (choice >0 && choice <6)
{
System.out.println("Enter the quantity for "+product[choice]+":");
qty = input.nextInt();
user_selectected_qty[choice]+=qty;
// ... ASK TO DO IT AGAIN...
again=false;
}
else
{
System.out.println("Wrong choice:");
}
}
// BEFORE END SHOW SUMMARY ...COMPUTE TOTAL ...
System.out.println("LAPTOP ORDER SUMARY");
for(int i=1; i<product.length ; i++)
if (user_selectected_qty[i] > 0)
System.out.println(""+user_selectected_qty[i]+"\t"+product[i]+"\t\t\t"+unit_rate[i]*user_selectected_qty[i]);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.