Есть метод добавления товара в корзину, когда вызываю его в первый раз, всё отрабатывает корректно, когда вызываю второй раз в product ничего не записывается, при вызове в третий раз, всё снова отрабатывается корректно.
public void addProduct() {
String product;
int quantity;
System.out.print("Пожалуйста, введите наименование товара: ");
product = scan.nextLine();
for (Product p : Products) {
if (product.equalsIgnoreCase(p.getName())) {
System.out.print("Пожалуйста, введите количество нужного товара: ");
quantity = scan.nextInt();
System.out.println("Товар: " + product + ", в количестве: " + quantity + " шт. был успешно добавлен в корзину!");
choose = product + " " + quantity;
Goods.add(choose);
sum += p.getCost() * quantity;
}
}
}
Может кто поможет понять, почему не хочет сканировать во второй раз?
nextInt() забирает из введённой строки только число, но оставляет \n - символ переноса строки, который получается, когда пользователь нажимает Enter. Затем при вызове метода nextLine() он читает этот оставшийся символ и сразу заканчивает работу. Проблему легко можно решить добавив вызов nextLine(), после вызова nextInt(). Он будет читать этот символ. Зато следующий nextLine() отработает как надо.
public void addProduct() {
String product;
int quantity;
System.out.print("Пожалуйста, введите наименование товара: ");
product = scan.nextLine();
for (Product p : Products) {
if (product.equalsIgnoreCase(p.getName())) {
System.out.print("Пожалуйста, введите количество нужного товара: ");
quantity = scan.nextInt();
scan.nextLine(); //fix!
System.out.println("Товар: " + product + ", в количестве: " + quantity + " шт. был успешно добавлен в корзину!");
choose = product + " " + quantity;
Goods.add(choose);
sum += p.getCost() * quantity;
}
}
}
Вот рабочий код. И ссылка на такой же вопрос на англоязычном stackoverflow.
Сделайте примерно так...
Классы Product и Basket написал, а класс Main попробуйте отрефакторить сами
import java.io.IOException;
import java.util.ArrayList;
import java.util.InputMismatchException;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Scanner;
import java.util.TreeMap;
public class Main {
public static void main(String[] args) throws IOException {
List<Product> productList = new ArrayList<>();
productList.add(new Product ("aaa", 3));
productList.add(new Product ("bbb", 2));
productList.add(new Product ("ccc", 4));
Basket basket = new Basket();
addProduct(basket, productList);
addProduct(basket, productList);
addProduct(basket, productList);
System.out.println(basket.get());
System.out.println(basket.getTotalCost());
}
public static boolean addProduct(Basket basket, List<Product> products) {
try {
Scanner scan = new Scanner(System.in);
System.out.println("Пожалуйста, введите наименование товара: ");
String choose = scan.nextLine();
for (Product product : products) {
if (product.getName().equals(choose)) {
System.out.println("Пожалуйста, введите количество нужного товара: ");
int quantity = basket.add(product, scan.nextInt());
System.out.println("Товар: " + product + ", в количестве: " + quantity + " шт. был успешно добавлен в корзину!");
return true;
}
}
System.out.println("Товар не найден!");
} catch (InputMismatchException e) {
System.out.println("Ошибка при вводе количества товара!");
}
return false;
}
}
class Product implements Comparable<Product>{
private final String name;
private final int cost;
public Product(String name, int cost) {
this.name = name;
this.cost = cost;
}
public String getName() {
return name;
}
public int getCost() {
return cost;
}
@Override
public int hashCode() {
int hash = 7;
hash = 73 * hash + Objects.hashCode(this.name);
hash = 73 * hash + this.cost;
return hash;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final Product other = (Product) obj;
if (this.cost != other.cost) {
return false;
}
if (!Objects.equals(this.name, other.name)) {
return false;
}
return true;
}
@Override
public String toString() {
return "Product{" + "name=" + name + ", cost=" + cost + '}';
}
@Override
public int compareTo(Product p) {
return (p==null) ? -1 : this.getName().compareTo(p.getName());
}
}
class Basket {
private final Map<Product, Integer> basketMap = new TreeMap<>();
public int add(Product choose, int quantity){
if (!basketMap.containsKey(choose)) basketMap.put(choose, quantity);
else basketMap.put(choose, basketMap.get(choose) + quantity);
return quantity;
}
public Map<Product, Integer> get(){
return basketMap;
}
public int getTotalCost(){
return basketMap.entrySet().stream()
.mapToInt(e -> e.getKey().getCost()*e.getValue())
.sum();
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
нужна команда(ы), которые смогут проверить, есть ли ф указаном пути, файлы, разных расшрений, или просто, чтобы по имени файлов нашло их
Главный поток входит в монитор объекта AСоперничающий входит в монитор объекта B
Пытаюсь написать запрос на hql, который вернет одну цифру методом getSingleResult(), все вполне сносно работало до тех пор, пока не появилась нужда...