有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何避免在用户第一次输入时显示这些消息

因此,我正在制作一个Java应用程序,它将产品保存在仓库系统中,并允许客户购买可用的物品。我已经完成了很多工作,但从一开始就收到的输出中的一个小错误一直困扰着我。当程序首先询问客户希望购买多少产品时,它几乎显示了下面while循环中包含的所有消息。我知道这可能是一个非常简单的错误,但我似乎找不到一个合适的方法来修复它。 这是一节课:

package com.forward.forward;

import java.io.IOException;
import java.lang.reflect.Array;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.*;

public class ForwardApplication {

public static void main(String[] args)
{

    Product product1 = new Product("Fender Jazz Bass", "Bass", "Relative", "None", 400, 2016);
    Product product2 = new Product("Fender Jaguar", "Guitar", "Relative", "None", 300, 2020);
    Product product3 = new Product("Fender Mustang", "Guitar", "Relative", "None", 200, 2018);
    Product product4 = new Product("Jackson Rhodes V", "Guitar", "Relative", "None", 1000, 1998);
    Product product5 = new Product("Vox VT20+", "Amplifiers", "Relative", "None", 250, 2015);

    ProductQuantity product1Quantity = new ProductQuantity(product1, 2);
    ProductQuantity product2Quantity = new ProductQuantity(product2, 4);
    ProductQuantity product3Quantity = new ProductQuantity(product3, 3);
    ProductQuantity product4Quantity = new ProductQuantity(product4, 0);
    ProductQuantity product5Quantity = new ProductQuantity(product5, 10);

    Warehouse stock = new Warehouse();
    stock.addProductQuantity("Fender Jazz Bass", product1Quantity);
    stock.addProductQuantity("Fender Jaguar", product2Quantity);
    stock.addProductQuantity("Fender Mustang", product3Quantity);
    stock.addProductQuantity("Jackson Rhodes V", product4Quantity);
    stock.addProductQuantity("Vox VT20+", product5Quantity);

    Scanner in = new Scanner(System.in);

    ArrayList<String> productsList = new ArrayList<>();     //list of customer products for 
ease of alphabetical re-arrangement and element wandering through cycles

    //printing available products and quantities to avoid throwing IllegalArgumentException 
from ProductQuantity
    System.out.println("Available Products:");
    System.out.println("1." + stock.storageMap.get("Fender Jazz 
Bass").getProduct().getDescription()
            + " - " + stock.storageMap.get("Fender Jazz Bass").getQuantity() + " units 
available");
    System.out.println("2." + stock.storageMap.get("Fender 
Jaguar").getProduct().getDescription()
            + " - " + stock.storageMap.get("Fender Jaguar").getQuantity() + " units 
available");
    System.out.println("3." + stock.storageMap.get("Fender 
Mustang").getProduct().getDescription()
            + " - " + stock.storageMap.get("Fender Mustang").getQuantity() + " units 
available");
    System.out.println("4." + stock.storageMap.get("Jackson Rhodes 
V").getProduct().getDescription()
            + " - " + stock.storageMap.get("Jackson Rhodes V").getQuantity() + " units 
available");
    System.out.println("5." + stock.storageMap.get("Vox VT20+").getProduct().getDescription()
            + " - " + stock.storageMap.get("Vox VT20+").getQuantity() + " units available"
    + "\n ------------------------------------------");

    System.out.println("How many products would you like to purchase?");
    int numberOfProducts = in.nextInt();

    int i = 0;
    int customerQuantity = 0;   //product quantity ordered - info received from user
    Vector<Integer> quantitiesSaver = new Vector<>();   //quantities are saved in a vector, so 
that alphabetical re-arrangement of productsList doesn't scramble the order info
    String customerNeed = ""; //customer's ordered product saved in customerNeed, to be used 
as key to access storageMap HashMap
    while (i < numberOfProducts)       //loop to show messages and receive info based on 
quantity provided in first message
    {   //MISTAKE OF OUTPUT HERE!
        System.out.println("Add product to your list (" + (numberOfProducts - i) + " left):");
        customerNeed = in.nextLine();
        if (stock.getProductQuantity(customerNeed) == 0)
        {
            System.out.println("Product no longer in stock!");
            continue;
        }
        System.out.println("Available! Product added to list.");
        productsList.add(customerNeed);
        Collections.sort(productsList, String.CASE_INSENSITIVE_ORDER);  //productsList ordered 
alphabetically
        i++;
    }

    for(i = 0; i < productsList.size(); i++)    //product quantities asked for AFTER 
alphabetical rearrangement, so quantities belong to appropriate products
    {
        System.out.println("Please provide quantity of purchase for " + productsList.get(i) + 
":");
        customerQuantity = in.nextInt();
        





  stock.storageMap.get(productsList.get(i)).setQuantity(stock.storageMap.get(productsList.get(i)).ge 
   tQuantity()
                - customerQuantity); //for more detailed info display on order.txt
        quantitiesSaver.add(customerQuantity);  //quantities now ordered in same way as the products list
    }


    List<ProductQuantity> productsOrdered = new ArrayList<>();  //list type to correspond with 
Order class structure
    for (i = 0; i < productsList.size(); i++)
    {
        productsOrdered.add(stock.storageMap.get(productsList.get(i)));
    }

    Order order = new Order();
    String output = "---Your Order---"; //output to send on order.txt

    //creating order object
    order.setListOfQuantity(productsOrdered);
    order.setId((int)(Math.random() * 1000 + 1));
    order.setDescription( "" + productsList);
    Date today = new Date();
    order.setDate(today);

    //first giving individual products ordered and other info
    for(i = 0; i < order.getListOfQuantity().size(); i++)
    {
        output = output + "\n -" + 
order.getListOfQuantity().get(i).getProduct().getDescription() +
                "\n Left in stock: " + order.getListOfQuantity().get(i).getQuantity() +
                "\n Unit price: $" + productsOrdered.get(i).getProduct().getPrice() +
                "\n Units purchased: " + quantitiesSaver.get(i) +
                ".";
    }

    //adding final order info
    output = output + "\n---Order Details---" +
            "\n Order ID: " + order.getId() +
            "\n Order Description: " + order.getDescription() +
            "\n Order Date: " + order.getDate() +
            "\n Total Cost: " + order.getTotalCost(quantitiesSaver);

    //send application output to order.txt file
    try {
        Files.writeString(Path.of("order.txt"), output);

    } catch (IOException ex) {
        ex.printStackTrace();
    }

    //system.out used for testing
    //System.out.println(quantitiesSaver);
}}

以下是我第一次提供产品数量时收到的信息:

How many products would you like to purchase?
1 //quantity provided by user
Add product to your list (1 left): //useless message
Product is not present in warehouse! //useless message
Product no longer in stock! //useless message
Add product to your list (1 left): //program continues normally

那些被标记为“无用消息”的消息出现了,并且什么也不做。这些就是我想摆脱的


共 (1) 个答案

  1. # 1 楼答案

    尝试添加“in.nextLine();”就在“int numberOfProducts=in.nextInt();”之后。 我认为问题在于程序在读取输入值之前/之后读取了一个空行,这就是为什么它直接进入“测试”而循环并显示这些消息