You have been given the job of creating a new order processing system for the Yummy Fruit CompanyTM. The system reads pricing information for the various delicious varieties of fruit stocked by YFC, and then processes invoices from customers, determining the total amount for each invoice based on the type and quantity of fruit for each line item in the invoice. The program input starts with the pricing information. Each fruit price (single quantity) is specified on a single line, with the fruit name followed by the price. You can assume that each fruit name is a single word consisting of alphabetic characters (A–Z and a–z). You can also assume that prices will have exactly two decimal places after the decimal point. Fruit names and prices are separated by a single space character. The list of fruit prices is terminated by a single line consisting of the text END_PRICES. After the fruit prices, there will be one or more invoices. Each invoice consists of a series of line items. A line item is a fruit name followed by an integer quantity, with the fruit name and quantity separated by a single space. You can assume that no line item will specify a fruit name that is not specified in the fruit prices. Each invoice is terminated by a line consisting of the text END_INVOICE. As a special case, if a line with the text QUIT appears instead of the beginning of an invoice, the program should exit immediately. The overall input will always be terminated by a QUIT line. (5 points)

Respuesta :

Answer:

Invoice.java

import java.util.*;

public class Invoice {

   static final String endPrices = "END_PRICES";

   static final String endInvoice = "END_INVOICE";

   static final String quit = "QUIT";

   public static void main(String... args) {

       Scanner sc = new Scanner(System.in);

       //HashMap to store fruit name as key and price as value

       Map<String, Float> fruits = new HashMap<>();

       //Loop until input is not "END_PRICES"

       while (true){

           String input = sc.next();

           //Come out of loop if input is "END_PRICES"

           if(input.equals(endPrices))

               break;

           float price = Float.parseFloat(sc.next());

           //add fruit to hash map

           fruits.put(input, price);

       }

       //ArrayList to store total cost of each invoice

       List<Float> totalList = new ArrayList<>();

       Float total = 0f;

       //loop until input becomes "QUIT"

       while (true){

           String input = sc.next();

           //Break out of the loop if input is "QUIT"

           if(input.equals(quit)){

               break;

           }

           //Add total price of the invoice to array list and set total to "0f" to store total of next invoice

           if(input.equals(endInvoice)){

               totalList.add(total);

               total = 0f;

               continue;

           }

           int quantity = sc.nextInt();

           total += (fruits.get(input)*quantity);

       }

       //Iterate through all objects in the total Array List and print them

       Iterator itr = totalList.iterator();

       while (itr.hasNext()){

           System.out.printf("Total: %.2f \n", itr.next());

       }

   }

}