Así que estoy haciendo un programa java que toma lo que compró un cliente y usa una matriz y un mapa hash para calcular cuánto cuesta la tarea de CSE (estaba jugando con la impresión de otras cosas con esto también). Pero ahora quiero que el usuario ingrese primero el producto y luego la cantidad para poder hacer un programa de "caja registradora" simple y fácil de usar. Básicamente solo quiero system.out's ¿Alguna idea sobre cómo hacer esto?

No estoy seguro de si un bucle con múltiples escáneres / sistemas en líneas de código funcionaría o no, y realmente no estoy seguro de cómo abordar este problema.

Ah, y además, si te pidieron algo similar, ¡dímelo! No pude encontrar nada similar, pero probablemente estoy equivocado.

import java.util.HashMap;
import java.util.ArrayList;
public class preLab3 {

// PreLab Q1: Compute the price of buying a specific quantity of a single item

    public static double getPriceSingleItemType(HashMap<String, Double> priceList, String itemType, int quantity) {
        double itemPrice = priceList.get(itemType);
        return itemPrice * quantity;
    }


// PreLab Q2: Compute the price of a single order
    public static double getPrice(HashMap<String, Double> priceList, ArrayList<String> basket) {

        double totalCost = 0.0;
        for(String item: basket) {
            double itemPrice = priceList.get(item);
            totalCost = totalCost + itemPrice;
        }

        return totalCost;
    }


public static HashMap<String, Double> getPriceList() {
    HashMap<String, Double> priceList = new HashMap<String, Double>();

    priceList.put("eggs", 1.79); // per dozen
    priceList.put("butter", 3.19);
    priceList.put("cheese", 5.99);
    priceList.put("apple", 0.99); // per pound
    priceList.put("banana", 0.39); // per pound
    priceList.put("strawberries", 1.99);
    priceList.put("peppers", 0.99);
    priceList.put("tomato sauce", 0.5);
    priceList.put("chocolate chips", 2.29);

    return priceList;
}
public static void main(String[] args) {

    System.out.println(getPriceList());

// PreLab Q3: I want to buy 3 lbs of strawberries
    double price = getPriceSingleItemType(getPriceList(), "strawberries", 3);
    System.out.println(price);

    ArrayList<String> cart = new ArrayList<>();

    cart.add("strawberries");
    cart.add("strawberries");
    cart.add("strawberries");
    cart.add("chocolate chips");
    cart.add("banana");
    cart.add("banana");
    cart.add("apple");
    cart.add("eggs");
    cart.add("butter");

    double totalCost = getPrice(getPriceList(), cart);
    System.out.println("The customer must pay: " + totalCost + " USD");

    ArrayList<HashMap<String, Integer>> orders = new ArrayList<>();
    for(HashMap<String, Integer> maps : orders) {


    }
}

}

1
M. Gaddaffi 17 feb. 2018 a las 02:10

2 respuestas

La mejor respuesta

Primero cree un Scanner objeto para la entrada del usuario, luego use el código de ejemplo que ya tiene donde cart.add(item) agrega la entrada del usuario item, y repita cada elemento para la entrada del usuario quantity. Entonces, en conjunto, algo como esto:

// ... same code above   
ArrayList<String> cart = new ArrayList<>();

Scanner input = new Scanner(System.in);
String user_item = "";
int user_quantity = 0;
System.out.println("What items would you like to buy?");

// Loop to repeatedly get user input and add items to cart
// until user enters "q" for item to quit.
do {
    System.out.print("Item? (q to quit) ");
    user_item = input.nextLine();
    if (user_item.equals("q")){
        break;
    }
    System.out.print("How many " + user_item + "? ");
    user_quantity = input.nextInt();
    System.out.println(user_quantity + " " + user_item);
    for(int q = 0; q <= user_quantity; q++){
       cart.add(user_item);
    }
} while(!input.nextLine().equals("q"));
input.close();

// Remove these
// cart.add("strawberries");
// cart.add("strawberries");
// cart.add("strawberries");
// cart.add("chocolate chips");
// cart.add("banana");
// cart.add("banana");
// cart.add("apple");
// cart.add("eggs");
// cart.add("butter");

double totalCost = getPrice(getPriceList(), cart);
// ... same code below

Ejemplo de ejecución:

{banana=0.39, eggs=1.79, apple=0.99, butter=3.19, peppers=0.99, chocolate chips=2.29, tomato sauce=0.5, strawberries=1.99, cheese=5.99}
What items would you like to buy?
Item? (q to quit) butter
How many butter? 1
1 butter
Item? (q to quit) eggs
How many eggs? 2
2 eggs
Item? (q to quit) q
The customer must pay: 11.75 USD

Por supuesto, probablemente también desee agregar manejo de errores / excepciones para la entrada de usuario no válida.

Espero que esto ayude.

0
davedwards 17 feb. 2018 a las 00:11

En primer lugar, debería considerar mirar esta publicación para obtener referencias futuras / actuales sobre métodos estáticos. https://stackoverflow.com/a/7084473/1770303

En este caso, debería hacer referencia a su mapa de hash como un objeto, ya sea declarándolo globalmente en su clase y agregando pares clave-valor en un método o creando una clase separada que haga esencialmente lo mismo. La forma en que organiza su código depende en gran medida de la persona. Por último, cada entrada del usuario debe comprobarse con los valores clave para ver si es una clave válida antes de continuar. Si la entrada del usuario no está contenida en su mapa, ¿cuál es el requisito? ¿Cómo vas a manejar eso?

En cuanto al escáner, haría referencia a la siguiente publicación que proporciona el enlace a la documentación sobre la clase de escáner. https://stackoverflow.com/a/14679497/1770303

0
Scott 16 feb. 2018 a las 23:51