What is the comparTo method used in the code? public class Drink extends Product
ID: 3701810 • Letter: W
Question
What is the comparTo method used in the code?
public class Drink extends Product implements Comparable<Product> {
private String productType = "drink";
private boolean isDrink = true;
public Drink() {
// TODO Auto-generated constructor stub
super();
}
public static void main(String[] args) {
Product p1 = new Product("Drink 1", "power-c", "Vitamin Water", 0.99,
12.32, 23, 34, 3);
System.out.println(p1);
Product p2 = new Product("Drink 2", "vital-t", "Vitamin water", 0.99,
12.32, 23, 34, 3);
System.out.println(p2);
System.out.println("p1.compareTo(p2) : " + p1.compareTo(p2));
System.out.println("p2.compareTo(p2) : " + p2.compareTo(p2));
Drink d1 = new Drink(p1);
Drink d2 = new Drink(p2);
System.out.println("d1.compareTo(d2) : " + d1.compareTo(d2));
System.out.println("d2.compareTo(d2) : " + d2.compareTo(d2));
}
public String getProductType() {
return productType;
}
public boolean isDrink() {
return isDrink;
}
public Drink(String name, String brand, String foodGroup, double price,
double sugar, double protein, double sodium, double calories) {
super(name, brand, foodGroup, price, sugar, protein, sodium, calories);
}
// Copy Constructor
public Drink(Product productToCopy) {
super();
this.setName(productToCopy.getName());
this.setBrand(productToCopy.getBrand());
this.setFoodGroup(productToCopy.getFoodGroup());
this.setPrice(productToCopy.getPrice());
this.setSugar(productToCopy.getSugar());
this.setProtein(productToCopy.getProtein());
this.setSodium(productToCopy.getSodium());
this.setExpirationDate(productToCopy.getExpirationDate());
}
@Override
public String toString() {
StringBuilder resultStringBuilder = new StringBuilder();
resultStringBuilder.append("Drink: " + " ");
resultStringBuilder.append(this.getName() + " ");
resultStringBuilder.append(this.getBrand() + " ");
resultStringBuilder.append(this.getPrice() + " ");
resultStringBuilder.append(this.getSugar() + " ");
resultStringBuilder.append(this.getProtein() + " ");
resultStringBuilder.append(this.getSodium() + " ");
resultStringBuilder.append(this.getCalories() + " ");
resultStringBuilder.append(this.getExpirationDate() + " ");
String result = resultStringBuilder.toString();
return result;
}
}
import java.time.LocalDate;
import java.time.ZoneId;
import java.util.Date;
public class Product implements Comparable<Product> {
// Shared Properties
private String name;
private String brand;
private String foodGroup;
private double price;
// Nutrition Facts
private double sugar;
private double protein;
private double sodium;
private double calories;
// Expiration Date - format mm/dd/yyyy
private String expirationDate;
// Default Constructor
public Product() {
this.name = null;
this.brand = null;
this.foodGroup = null;
this.price = 0.0;
this.sugar = 0.0;
this.protein = 0.0;
this.sodium = 0.0;
this.calories = 0.0;
this.setExpirationDate(calculateExpirationDate());
}
// Parameterized Constructor
public Product(String name, String brand, String foodGroup, double price,
double sugar, double protein, double sodium, double calories) {
this.name = name;
this.brand = brand;
this.foodGroup = foodGroup;
this.price = price;
this.sugar = sugar;
this.protein = protein;
this.sodium = sodium;
this.calories = calories;
this.setExpirationDate(calculateExpirationDate());
}
// Copy Constructor
public Product(Product productToCopy) {
this.name = productToCopy.getName();
this.brand = productToCopy.getBrand();
this.foodGroup = productToCopy.getFoodGroup();
this.price = productToCopy.getPrice();
this.sugar = productToCopy.getSugar();
this.protein = productToCopy.getProtein();
this.sodium = productToCopy.getSodium();
this.calories = productToCopy.getCalories();
this.setExpirationDate(calculateExpirationDate());
}
public String toString() {
StringBuilder resultStringBuilder = new StringBuilder();
resultStringBuilder.append(this.getName() + " ");
resultStringBuilder.append(this.getBrand() + " ");
resultStringBuilder.append(this.getPrice() + " ");
resultStringBuilder.append(this.getSugar() + " ");
resultStringBuilder.append(this.getProtein() + " ");
resultStringBuilder.append(this.getSodium() + " ");
resultStringBuilder.append(this.getCalories() + " ");
resultStringBuilder.append(this.getExpirationDate() + " ");
String result = resultStringBuilder.toString();
return result;
}
// Temporary compares the name of the products, returns 1 if equal or -1 if
// not. Will be needed later.
@Override
public int compareTo(Product other) {
int result = 0;
if ((this.name).equals(other.name)) {
result = 1;
} else {
result = -1;
}
return result;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
public String getFoodGroup() {
return foodGroup;
}
public void setFoodGroup(String foodGroup) {
this.foodGroup = foodGroup;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public double getSugar() {
return sugar;
}
public void setSugar(double sugar) {
this.sugar = sugar;
}
public double getProtein() {
return protein;
}
public void setProtein(double protein) {
this.protein = protein;
}
public double getSodium() {
return sodium;
}
public void setSodium(double sodium) {
this.sodium = sodium;
}
public double getCalories() {
return calories;
}
public void setCalories(double calories) {
this.calories = calories;
}
public String getExpirationDate() {
return expirationDate;
}
public void setExpirationDate(String expirationDate) {
this.expirationDate = expirationDate;
}
public String calculateExpirationDate() {
Date today = new Date();
LocalDate localDate = today.toInstant().atZone(ZoneId.systemDefault())
.toLocalDate();
int year = localDate.getYear();
int month = localDate.getMonthValue();
int day = localDate.getDayOfMonth();
// For Drinks, add 9 months
if (this.getClass().getSimpleName().equals("Drink"))
month += 9;
// For Chips, add 3 months
if (this.getClass().getSimpleName().equals("Chips"))
month += 3;
// For Candy, add 6 months
if (this.getClass().getSimpleName().equals("Candy"))
month += 6;
// For Gum, add 1 year
if (this.getClass().getSimpleName().equals("Drink"))
year += 1;
String expDate = month + "/" + day + "/" + year;
return expDate;
}
}
public class Snack extends Product implements Comparable<Product> {
private String productType = "snack";
private boolean isSnack = true;
public Snack() {
super();
}
public static void main(String[] args) {
Product p1 = new Product("Drink 1", "power-c", "Vitamin Water", 0.99,
12.32, 23, 34, 3);
System.out.println(p1);
Product p2 = new Product("Drink 2", "vital-t", "Vitamin water", 0.99,
12.32, 23, 34, 3);
System.out.println(p2);
System.out.println("p1.compareTo(p2) : " + p1.compareTo(p2));
System.out.println("p2.compareTo(p2) : " + p2.compareTo(p2));
Snack s1 = new Snack(p1);
Snack s2 = new Snack(p2);
System.out.println("s1.compareTo(s2) : " + s1.compareTo(s2));
System.out.println("s2.compareTo(s2) : " + s2.compareTo(s2));
}
public String getProductType() {
return productType;
}
public boolean isSnack() {
return isSnack;
}
public Snack(String name, String brand, String foodGroup, double price,
double sugar, double protein, double sodium, double calories) {
super(name, brand, foodGroup, price, sugar, protein, sodium, calories);
}
// Copy Constructor
public Snack(Product productToCopy) {
super();
this.setName(productToCopy.getName());
this.setBrand(productToCopy.getBrand());
this.setFoodGroup(productToCopy.getFoodGroup());
this.setPrice(productToCopy.getPrice());
this.setSugar(productToCopy.getSugar());
this.setProtein(productToCopy.getProtein());
this.setSodium(productToCopy.getSodium());
this.setExpirationDate(productToCopy.getExpirationDate());
}
@Override
public String toString() {
StringBuilder resultStringBuilder = new StringBuilder();
resultStringBuilder.append(this.getName() + " ");
resultStringBuilder.append(this.getBrand() + " ");
resultStringBuilder.append(this.getPrice() + " ");
resultStringBuilder.append(this.getSugar() + " ");
resultStringBuilder.append(this.getProtein() + " ");
resultStringBuilder.append(this.getSodium() + " ");
resultStringBuilder.append(this.getCalories() + " ");
resultStringBuilder.append(this.getExpirationDate() + " ");
String result = resultStringBuilder.toString();
return result;
}
}
Explanation / Answer
class Drink and Snack are the suclass (child) of Product class.
compareTo method has defined in Product method:
public int compareTo(Product other) {
int result = 0;
if ((this.name).equals(other.name)) {
result = 1;
} else {
result = -1;
}
return result;
}
compareTo method comparing two Product object based on name of the products.
Plase let me know in case of any issue.
Please rate my answer if it helped you!!