diff --git a/Java/src/main/java/com/gildedrose/GildedRose.java b/Java/src/main/java/com/gildedrose/GildedRose.java index f7930fb9..d0c48b06 100644 --- a/Java/src/main/java/com/gildedrose/GildedRose.java +++ b/Java/src/main/java/com/gildedrose/GildedRose.java @@ -7,19 +7,32 @@ class GildedRose { 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; public GildedRose(Item... items) { this.items = items; } - public void updateQuality() { + public void updateQuality() { for (Item item : items) { updateItemQuality(item); } } private void updateItemQuality(Item item) { + + 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 (doesDegrade) { + adjustQuality(item, degradeRate); + } + int degradeRate = item.name.equals(CONJURED) ? -2 : -1; if (!item.name.equals(AGED_BRIE) && !item.name.equals(BACKSTAGE)) { @@ -31,20 +44,26 @@ class GildedRose { } else { adjustQuality(item, 1); - if (item.name.equals(BACKSTAGE)) { - if (item.sellIn < 11) { - adjustQuality(item, 1); - } - if (item.sellIn < 6) { - adjustQuality(item, 1); - } - } - } + if (item.name.equals(AGED_BRIE)) { + int adjustment = isExpired ? 2 : 1; + adjustQuality(item, adjustment); + } - if (!item.name.equals(SULFURAS)) { - item.sellIn = item.sellIn - 1; - } + 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 < 0) { if (!item.name.equals(AGED_BRIE)) { @@ -60,12 +79,26 @@ class GildedRose { adjustQuality(item, adjustment); } } + } - public void adjustQuality(Item item, int adjustment) { + 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; } }