From 77826ba5bf3de318e775fc6757584ce17755b38d Mon Sep 17 00:00:00 2001 From: Sriramachandran Sitharaman Date: Wed, 21 Feb 2024 11:55:02 +0530 Subject: [PATCH] Refactored GildedRose code, Modified the updateQuality method to handle 'Conjured' items more efficiently --- .../main/java/com/gildedrose/GildedRose.java | 114 +++++++++++------- 1 file changed, 68 insertions(+), 46 deletions(-) diff --git a/Java/src/main/java/com/gildedrose/GildedRose.java b/Java/src/main/java/com/gildedrose/GildedRose.java index 87a3b926..4248537d 100644 --- a/Java/src/main/java/com/gildedrose/GildedRose.java +++ b/Java/src/main/java/com/gildedrose/GildedRose.java @@ -1,5 +1,7 @@ package com.gildedrose; +import java.util.Arrays; + class GildedRose { Item[] items; @@ -8,55 +10,75 @@ class GildedRose { } public void updateQuality() { - for (int i = 0; i < items.length; i++) { - if (!items[i].name.equals("Aged Brie") - && !items[i].name.equals("Backstage passes to a TAFKAL80ETC concert")) { - if (items[i].quality > 0) { - if (!items[i].name.equals("Sulfuras, Hand of Ragnaros")) { - items[i].quality = items[i].quality - 1; - } - } - } else { - if (items[i].quality < 50) { - items[i].quality = items[i].quality + 1; + Arrays.stream(items).forEach(this::updateItemQuality); + } - if (items[i].name.equals("Backstage passes to a TAFKAL80ETC concert")) { - if (items[i].sellIn < 11) { - if (items[i].quality < 50) { - items[i].quality = items[i].quality + 1; - } - } + private void updateItemQuality(Item item) { + switch (item.name) { + case "Aged Brie": + increaseQuality(item); + break; + case "Backstage passes to a TAFKAL80ETC concert": + handleBackstagePass(item); + break; + case "Sulfuras, Hand of Ragnaros": + // Legendary item, no changes needed + break; + case "Conjured": + decreaseQuality(item, 2); + break; + default: + decreaseQuality(item); + break; + } - if (items[i].sellIn < 6) { - if (items[i].quality < 50) { - items[i].quality = items[i].quality + 1; - } - } - } - } + if (!item.name.equals("Sulfuras, Hand of Ragnaros")) { + item.sellIn -= 1; + } + + if (item.sellIn < 0) { + handleExpiredItem(item); + } + } + + private void increaseQuality(Item item) { + if (item.quality < 50) { + item.quality += 1; + } + } + + private void decreaseQuality(Item item) { + if (item.quality > 0) { + item.quality -= 1; + } + } + + private void decreaseQuality(Item item, int factor) { + item.quality = Math.max(0, item.quality - factor); + } + + private void handleBackstagePass(Item item) { + if (item.quality < 50) { + item.quality += 1; + if (item.sellIn < 11) { + increaseQuality(item); } - - if (!items[i].name.equals("Sulfuras, Hand of Ragnaros")) { - items[i].sellIn = items[i].sellIn - 1; - } - - if (items[i].sellIn < 0) { - if (!items[i].name.equals("Aged Brie")) { - if (!items[i].name.equals("Backstage passes to a TAFKAL80ETC concert")) { - if (items[i].quality > 0) { - if (!items[i].name.equals("Sulfuras, Hand of Ragnaros")) { - items[i].quality = items[i].quality - 1; - } - } - } else { - items[i].quality = items[i].quality - items[i].quality; - } - } else { - if (items[i].quality < 50) { - items[i].quality = items[i].quality + 1; - } - } + if (item.sellIn < 6) { + increaseQuality(item); } } } -} + + private void handleExpiredItem(Item item) { + if (!item.name.equals("Aged Brie") && !item.name.equals("Backstage passes to a TAFKAL80ETC concert")) { + if (!item.name.equals("Sulfuras, Hand of Ragnaros")) { + decreaseQuality(item); + if (item.name.equals("Conjured")) { + decreaseQuality(item, 1); // Additional decrease for Conjured items + } + } + } else { + item.quality = 0; + } + } +}