简体   繁体   English

Java 程序产生不正确的 output。 (while循环)

[英]Java program producing incorrect output. (while-loop)

Here is a sample of what output should look like!!这是 output 应该是什么样子的示例!

My program for displaying an order summary for purchased laptops uses a (1)while loop to process multiple laptops, an (2)if-else to get the laptop name/price;我用于显示购买笔记本电脑订单摘要的程序使用 (1)while 循环来处理多台笔记本电脑,使用 (2)if-else 来获取笔记本电脑名称/价格; or the error message "Invalid choice. Try again,".或错误消息“无效的选择。再试一次”。 a (3)nested if to figure out when the choice of laptop is valid to proceed with the rest of the processing. a (3)嵌套如果要弄清楚笔记本电脑的选择何时有效,再进行rest的处理。 And a (4)nested if to only print order summary when laptops are purchased.以及 (4) 嵌套的 if 仅在购买笔记本电脑时打印订单摘要。

When I input an invalid number (like 8) into choice, the if statement still executes rather than the else that is below it.当我在选项中输入一个无效数字(如 8)时,if 语句仍然执行,而不是它下面的 else。
When I input a valid number into choice, it then asks for quantity, but when I input a quantity, how would I add that user input to the order summary instead of the program returning to the top of the loop?当我在选项中输入一个有效数字时,它会询问数量,但是当我输入一个数量时,我如何将该用户输入添加到订单摘要而不是程序返回到循环的顶部?

I'm very new to Java, how should my code look to produce the correct output?我对 Java 很陌生,我的代码应该如何生成正确的 output?

Here is the current code I have (JAVA)这是我拥有的当前代码(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
    }
} 

Because statements rules AND (&&) OR (&&) correspond to boolean algebra.因为语句规则 AND (&&) OR (&&) 对应于 boolean 代数。

if (choice < 6 || choice > 0) corresponds to 'if choice is <8' is True OR if 'choice > 0' is true then whole expression is true if (choice < 6 ||choice > 0) 对应于 'ifchoice is <8' 为 True 或如果 'choice > 0' 为真,则整个表达式为真

eg for 8 selected it will be TRUE so else will not happen例如选择 8 它将是 TRUE 所以不会发生

try if (choice > 0 && choice <6)试试 if (选择 > 0 && 选择 <6)

Then think the 'business logic', prepare to store and reuse, organise your variable for calculation, please find below example然后思考“业务逻辑”,准备存储和重用,组织你的变量进行计算,请看下面的例子

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM