From 72f0a797bc8219b620572f1408ce5329562366b8 Mon Sep 17 00:00:00 2001 From: cammp325 <108045774+cammp325@users.noreply.github.com> Date: Mon, 4 Jul 2022 14:21:44 -0400 Subject: [PATCH] message --- .../main/java/com/gildedrose/GildedRose.java | 87 ++++++++++--------- 1 file changed, 45 insertions(+), 42 deletions(-) diff --git a/Java/src/main/java/com/gildedrose/GildedRose.java b/Java/src/main/java/com/gildedrose/GildedRose.java index 069fc555..041584a1 100644 --- a/Java/src/main/java/com/gildedrose/GildedRose.java +++ b/Java/src/main/java/com/gildedrose/GildedRose.java @@ -5,6 +5,8 @@ class GildedRose { public static final String AGED_BRIE = "Aged Brie"; public static final String SULFURAS = "Sulfuras, Hand of Ragnaros"; public static final String BACKSTAGE = "Backstage passes to a TAFKAL80ETC concert"; + public static final String CONJURED = "Conjured Mana Cake"; + private Item[] items; private Item[] items; @@ -12,58 +14,59 @@ class GildedRose { this.items = items; } - public void updateQuality() { + public void updateQuality() { for (Item item : items) { updateItemQuality(item); } } private void updateItemQuality(Item item) { - if (!item.name.equals(AGED_BRIE) - && !item.name.equals(BACKSTAGE)) { - if (item.quality > 0) { - if (!item.name.equals(SULFURAS)) { - adjustQuality(item, -1); - } - } - } else { - adjustQuality(item, 1); + boolean isExpired = item.sellIn < 1; + int degradeRate = determineDegradeRate(item, isExpired); + boolean doesDegrade = !item.name.equals(AGED_BRIE) && !item.name.equals(BACKSTAGE) && !item.name.equals(SULFURAS); + boolean hasSellBy = !item.name.equals(SULFURAS); - if (item.name.equals(BACKSTAGE)) { - if (item.sellIn < 11) { - adjustQuality(item, 1); - } - - if (item.sellIn < 6) { - adjustQuality(item, 1); - } - } - } - - if (!item.name.equals(SULFURAS)) { - item.sellIn = item.sellIn - 1; - } - - if (item.sellIn < 0) { - if (!item.name.equals(AGED_BRIE)) { - if (!item.name.equals(BACKSTAGE)) { - if (!item.name.equals(SULFURAS)) { - adjustQuality(item, -1); - } - } else { - item.quality = item.quality - item.quality; - } - } else { - int adjustment = 1; - adjustQuality(item, adjustment); - } - } + if (doesDegrade) { + adjustQuality(item, degradeRate); } - public void adjustQuality(Item item, int adjustment) { + if (item.name.equals(AGED_BRIE)) { + int adjustment = isExpired ? 2 : 1; + adjustQuality(item, adjustment); + } + + if (item.name.equals(BACKSTAGE)) { + updateBackStagePass(item, isExpired); + } + + if (hasSellBy) { + item.sellIn = item.sellIn - 1; + } + } + + private void updateBackStagePass(Item item, boolean isExpired) { + adjustQuality(item, 1); + if (item.sellIn < 11) { + adjustQuality(item, 1); + } + + if (item.sellIn < 6) { + adjustQuality(item, 1); + } + if (isExpired) { + item.quality = item.quality - item.quality; + } + } + + private int determineDegradeRate(Item item, boolean isExpired) { + int baseDegradeRate = item.name.equals(CONJURED) ? -2 : -1; + return isExpired ? baseDegradeRate * 2 : baseDegradeRate; + } + + private void adjustQuality(Item item, int adjustment) { int newQuality = item.quality + adjustment; - boolean isValid = newQuality <= 50 && newQuality >= 0; - if (isValid) { + boolean isInvalidRange = newQuality <= 50 && newQuality >= 0; + if (isInvalidRange) { item.quality = newQuality; } }