Merge pull request #9 from Decker-Matthew-R/cpage4

message
This commit is contained in:
Matt Decker 2022-07-04 14:51:33 -05:00 committed by GitHub
commit a65f61a2e5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -7,6 +7,9 @@ class GildedRose {
public static final String BACKSTAGE = "Backstage passes to a TAFKAL80ETC concert"; public static final String BACKSTAGE = "Backstage passes to a TAFKAL80ETC concert";
public static final String CONJURED = "Conjured Mana Cake"; public static final String CONJURED = "Conjured Mana Cake";
private Item[] items;
private Item[] items; private Item[] items;
public GildedRose(Item... items) { public GildedRose(Item... items) {
@ -20,6 +23,16 @@ class GildedRose {
} }
private void updateItemQuality(Item 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; int degradeRate = item.name.equals(CONJURED) ? -2 : -1;
if (!item.name.equals(AGED_BRIE) if (!item.name.equals(AGED_BRIE)
&& !item.name.equals(BACKSTAGE)) { && !item.name.equals(BACKSTAGE)) {
@ -31,20 +44,26 @@ class GildedRose {
} else { } else {
adjustQuality(item, 1); adjustQuality(item, 1);
if (item.name.equals(BACKSTAGE)) {
if (item.sellIn < 11) {
adjustQuality(item, 1);
}
if (item.sellIn < 6) { if (item.name.equals(AGED_BRIE)) {
adjustQuality(item, 1); int adjustment = isExpired ? 2 : 1;
} adjustQuality(item, adjustment);
} }
}
if (!item.name.equals(SULFURAS)) { if (item.name.equals(BACKSTAGE)) {
item.sellIn = item.sellIn - 1; 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.sellIn < 0) {
if (!item.name.equals(AGED_BRIE)) { if (!item.name.equals(AGED_BRIE)) {
@ -60,12 +79,26 @@ class GildedRose {
adjustQuality(item, adjustment); 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; int newQuality = item.quality + adjustment;
boolean isValid = newQuality <= 50 && newQuality >= 0; boolean isInvalidRange = newQuality <= 50 && newQuality >= 0;
if (isValid) { if (isInvalidRange) {
item.quality = newQuality; item.quality = newQuality;
} }
} }