Skip to main content

Practice Code Structure

Section 1.50 Code Refactoring

Checkpoint 1.50.1.

You will see a copy of the printDiscount() function in an interactive mode where you can modify and compile it. We want you to improve the style of this function as an expert would view it without changing its behavior. To ensure this you can run your refactored code and compare the expected print messages with what your refactored method actually prints.
public class FinalPrice {
  public static void printDiscount(String itemType, double originalPrice, boolean hasSpecialOffer) {  
    double standardDiscount = 0.15;
	double bulkDiscount = 0.25;
	double vipDiscount = 0.5;
	String introMessage = "Item: " + itemType + ", Original Price: $" + originalPrice + ". ";
	String finalMessage = "Discounted Price: $";

	if ("electronics".equals(itemType) && hasSpecialOffer) {
		String message = introMessage;
		message += "Special offer applied. " + finalMessage;
		double discountedPrice = originalPrice * (1 - vipDiscount);
		message += discountedPrice;
		System.out.println(message);
	} else if (originalPrice > 200) {
		String message = introMessage;
		message += "Bulk discount applied. " + finalMessage;
		double discountedPrice = originalPrice * (1 - bulkDiscount);
		message += discountedPrice;
		System.out.println(message);
    } else {
	    String message = introMessage;
		message += finalMessage;
		double discountedPrice = originalPrice * (1 - standardDiscount);
		message += discountedPrice;
		System.out.println(message);
	}
  }
  
  public static void main(String[] args) {
        // Test Case 1: 
        System.out.println("Test Case 1: printDiscount(\"clothes\", 300.0, true);");
        System.out.println("Expected Output: Item: clothes, Original Price: $300.0. Bulk discount applied. Discounted Price: $225.0");
        System.out.print("Actual Output: ");
        printDiscount("clothes", 300.0, true);
        
        // Test Case 2: 
        System.out.println("\nTest Case 2: printDiscount(\"clothes\", 500.0, false);");
        System.out.println("Expected Output: Item: clothes, Original Price: $500.0. Bulk discount applied. Discounted Price: $375.0");
        System.out.print("Actual Output: ");
        printDiscount("clothes", 500.0, false);

        // Test Case 3: 
        System.out.println("\nTest Case 3: printDiscount(\"electronics\", 500.0, true);");
        System.out.println("Expected Output: Item: electronics, Original Price: $500.0. Special offer applied. Discounted Price: $250.0");
        System.out.print("Actual Output: ");
        printDiscount("electronics", 500.0, true);
    }
}

Activity 1.50.1.

    Which of the following code blocks is the most similar to your final refactored code for the previous question?
  • public class FinalPrice {
      public static void printDiscount(String itemType, double originalPrice, boolean hasSpecialOffer) {  
        double standardDiscount = 0.15;
        double bulkDiscount = 0.25;
        double vipDiscount = 0.5;
        double discountedPrice = 0;
        String introMessage = "Item: " + itemType + ", Original Price: $" + originalPrice + ". ";
        String finalMessage = "Discounted Price: $";
            
        
    
        if ("electronics".equals(itemType) && hasSpecialOffer) {
           introMessage += "Special offer applied. "; 
           discountedPrice = originalPrice * (1 - vipDiscount);
        } else if (originalPrice > 200) {
           introMessage += "Bulk discount applied. ";
           discountedPrice = originalPrice * (1 - bulkDiscount);
        } else {
           discountedPrice = originalPrice * (1 - standardDiscount);
        }   
        String message = introMessage + finalMessage + discountedPrice;
        System.out.println(message);
        }
    }
    
  • You are on the right track, but it is not well-structured yet, so keep improving it further.
  • public class FinalPrice {
        public static void printDiscount(String itemType, double originalPrice, boolean hasSpecialOffer) {  
            double standardDiscount = 0.15;
            double bulkDiscount = 0.25;
            double vipDiscount = 0.5;
            double discountType = 0;
            double finalPrice;
    
            String introMessage = "Item: " + itemType + ", Original Price: $" + originalPrice + ". ";
            String finalMessage = "Discounted Price: $";
    
            if ("electronics".equals(itemType) && hasSpecialOffer) {
                introMessage += "Special offer applied. "; 
                discountType = vipDiscount;
            } else if (originalPrice > 200) {
                introMessage += "Bulk discount applied. ";
                discountType = bulkDiscount;
            } else {
                discountType = standardDiscount;
            }  
    
            finalPrice = originalPrice * (1 - discountType);
            String message = introMessage + finalMessage + finalPrice;
            System.out.println(message);
        }
        
    }
    
  • You did it correctly!
  • public class FinalPrice {
        public static void printDiscount(String itemType, double originalPrice, boolean hasSpecialOffer) {  
            String introMessage = "Item: " + itemType + ", Original Price: $" + originalPrice + ". ";
            String finalMessage = "Discounted Price: $";
            double discountRate = 0.15;
            String message = "";
    
            if ("electronics".equals(itemType) && hasSpecialOffer) {
                discountRate = 0.5;
                message = "Special offer applied. ";
            } else if (originalPrice > 200) {
                discountRate = 0.25;
                message = "Bulk discount applied. ";
            }
    
            double finalPrice = originalPrice * (1 - discountRate);
            String printMessage = introMessage + message + finalMessage + finalPrice;
            System.out.println(printMessage);
        }
    }
    
  • You did it correctly!
You have attempted 1 of 3 activities on this page.