diff --git a/yitou/src/Bakery.java b/yitou/src/Bakery.java new file mode 100644 index 0000000000000000000000000000000000000000..d98c61ca777d347ba0530e07cad4196fcf70d24a --- /dev/null +++ b/yitou/src/Bakery.java @@ -0,0 +1,45 @@ +package src; + +import java.util.ArrayList; +import java.util.List; + +public class Bakery { + public List breads; + +public Bakery() { + breads = new ArrayList<>(); +} + +public void addBread(final int price, final int stock) { + breads.add(new Bread(price, stock)); +} + +public void bakeBreads(final Bread bread, final int amount) { + if (breads.contains(bread)) { + bread.addStock(amount); + } else { + // 例外処理またはエラーメッセージを返す + } +} + +public int buyBreads(final int[] quantities) { + int totalCost = 0; + + // 在庫あれば合計金額計算 + for (int i = 0; i < breads.size(); i++) { + if (quantities[i] > breads.get(i).getStock()) { + return -1; // 在庫不足 + } + totalCost += breads.get(i).getPrice() * quantities[i]; + } + + // 在庫を減らす + for (int i = 0; i < breads.size(); i++) { + if (quantities[i] > 0) { + breads.get(i).hasStock(quantities[i]); + } + } + + return totalCost; // 合計金額を返す + } +} \ No newline at end of file diff --git a/yitou/src/Bread.java b/yitou/src/Bread.java new file mode 100644 index 0000000000000000000000000000000000000000..2fe458b631b21a5d59671c5654985a9008c561af --- /dev/null +++ b/yitou/src/Bread.java @@ -0,0 +1,31 @@ +package src; + +public class Bread { + private int price; + private int stock; + + public Bread(final int price, final int stock) { + this.price = price; + this.stock = stock; + } + + public int getPrice() { + return price; + } + + public int getStock() { + return stock; + } + + public void addStock(final int amount) { + stock += amount; // 焼いた分だけ在庫を増やす + } + + public boolean hasStock(final int amount) { + if (stock >= amount) { + stock -= amount; // 在庫が足りている場合のみ減らす + return true; + } + return false; // 在庫不足 + } +} diff --git a/yitou/src/Main.java b/yitou/src/Main.java new file mode 100644 index 0000000000000000000000000000000000000000..96848c17dba45aa9f14f2ea325936ff9bb613f69 --- /dev/null +++ b/yitou/src/Main.java @@ -0,0 +1,52 @@ +package src; + +import java.util.ArrayList; +import java.util.List; +import java.util.Scanner; + +public class Main { + public static void main(final String[] args) { + final Scanner scanner = new Scanner(System.in); + final int breadKind = scanner.nextInt(); + final int queryCount = scanner.nextInt(); + final Bakery bakery = new Bakery(); + + // パン情報 + for (int i = 0; i < breadKind; i++) { + final int price = scanner.nextInt(); + final int stock = scanner.nextInt(); + bakery.addBread(price, stock); + } + + final List totalCostList = new ArrayList<>(); // 結果を格納 + + // クエリの処理 + for (int i = 0; i < queryCount; i++) { + final String query = scanner.next(); + final int[] quantities = new int[breadKind]; // パンの個数を格納する + + // パンの種類分値を取得する + for (int j = 0; j < breadKind; j++) { + quantities[j] = scanner.nextInt(); // 各パンの個数を取得 + } + + // 分岐の中ではscannerを呼ばない + if (query.equals("bake")) { + // 焼く場合は数量をそのまま使用する + for (int j = 0; j < breadKind; j++) { + bakery.bakeBreads(bakery.breads.get(j), quantities[j]); // 各パンを追加 + } + } else if (query.equals("buy")) { + final int totalCost = bakery.buyBreads(quantities); // パンを購入 + totalCostList.add(totalCost); // 結果をリストに追加 + } + } + + // 結果をまとめて出力 + for (int result : totalCostList) { + System.out.println(result); + } + + scanner.close(); + } +} \ No newline at end of file diff --git a/yitou/test/BakeryTest.java b/yitou/test/BakeryTest.java new file mode 100644 index 0000000000000000000000000000000000000000..e4ec20d26af4a4d69f97f18c0917585534530601 --- /dev/null +++ b/yitou/test/BakeryTest.java @@ -0,0 +1,41 @@ +package test; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.Assertions; +import src.Bakery; + +public class BakeryTest { + private Bakery bakery; + + @BeforeEach + void パンの準備() { + bakery = new Bakery(2); // 2種類のパンを管理 + bakery.addBread(0, 100, 10); // インデックス0、価格100、在庫10のパンを追加 + bakery.addBread(1, 200, 5); // インデックス1、価格200、在庫5のパンを追加 + } + + @Test + void パンを0番目に5個追加() { + bakery.bake(0, 5); // 0番目のパンを5個追加 + Assertions.assertEquals(15, bakery.breads[0].getStock()); // 在庫が15になるはず + } + + @Test + void パンを0番目に1個1番目に2個追加() { + final int[] quantities = {1, 2}; // 0番目を1個、1番目を2個購入 + final int result = bakery.buy(quantities); + Assertions.assertEquals(500, result); // 合計金額は500になるはず + Assertions.assertEquals(9, bakery.breads[0].getStock()); // 在庫は9になるはず + Assertions.assertEquals(3, bakery.breads[1].getStock()); // 在庫は3になるはず + } + + @Test + void パンが在庫になるパターン() { + final int[] quantities = {11, 1}; // 在庫不足のパターン + final int result = bakery.buy(quantities); + Assertions.assertEquals(-1, result); // 在庫不足のため-1が返るはず + Assertions.assertEquals(10, bakery.breads[0].getStock()); // 在庫はそのまま + Assertions.assertEquals(5, bakery.breads[1].getStock()); // 在庫はそのまま + } +} diff --git a/yitou/test/BreadTest.java b/yitou/test/BreadTest.java new file mode 100644 index 0000000000000000000000000000000000000000..055fd633b8bfad684f3ee967673c22cdda80d501 --- /dev/null +++ b/yitou/test/BreadTest.java @@ -0,0 +1,45 @@ +package test; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.Assertions; +import src.Bread; + +public class BreadTest { + private Bread bread; + + @BeforeEach + void パンの準備() { + bread = new Bread(100, 10); // 価格100、在庫10のパンを作成 + } + + @Test + void パンの価格100を取得() { + assertEquals(100, bread.getPrice()); // 価格が100であるはず + } + + @Test + void パンの在庫10を取得() { + assertEquals(10, bread.getStock()); // 在庫が10であるはず + } + + @Test + void パンを5個ついかして15にする() { + bread.bake(5); // 5個追加 + assertEquals(15, bread.getStock()); // 在庫が15になるはず + } + + @Test + void パンを5個購入して在庫が5になる() { + final boolean result = bread.buy(5); // 5個購入 + assertTrue(result); // 購入が成功する + assertEquals(5, bread.getStock()); // 在庫が5になるはず + } + + @Test + void 個数15により在庫不足() { + final boolean result = bread.buy(15); // 15個購入(在庫不足) + assertFalse(result); // 購入が失敗する + assertEquals(10, bread.getStock()); // 在庫はそのまま + } +}