TQC+ 物件導向程式語言 Java 6 608 食物熱量計算
第6類:物件導向程式設計與例外處理

TQC+ 物件導向程式語言 Java 6 608 食物熱量計算

來自的免費背景照片 zh.pngtree.com

題目前後相關,請閱讀完這個題組的五個題目之後再作答,每題答案皆能獨立執行。請將需要重複或共同使用的程式片段撰寫成函式,以供在類別中呼叫使用,避免在不同的類別中重複寫相同的程式碼,否則將酌量扣分。

題目一:

題目說明:

請開啟檔案 JPD06_1.java,設計「食物熱量計算」程式,請依下列題意完成作答。將 JPD06_1.java 內的 class JPD06_1 修改為 class JPA06_1,將檔案另存為 JPA06_1.java 後編譯為 JPA06_1.class,所有題目中有使用到的類別也請編譯後一併儲存。

設計說明:

(1) 請使用 abstract class 設計一個名為 Food (食物) 的類別,其資料屬性及方法如下。

(2) 資料屬性:
a. amount,整數 (int) 型態,代表食物的份量 (以公克為單位)。
b. calorie,整數 (int) 型態,代表每一公克的食物所具備的熱量。

(3) 方法:
a. Food,建構方法 (constructor),傳入一個整數 (int) 代表食物的份量 (以公克為單位)。
b. setCaloriePerGram,傳入一個整數 (int) 表示每一公克的食物所具備的熱量。
c. getAmount,傳回食物的份量 (以公克為單位)。
d. getCalorie,傳回食物的熱量 (每公克熱量 * 食物份量)。

(4) 利用所設計的 Food 抽象類別,請設計出以下的類別並且新增對應的物件,呼叫 getAmount 與 getCalorie 方法後印出傳回值。

類別名稱份量 (公克)單位熱量 (每公克)
Rice1001
Egg302
Cabbage501
ProkRib30010
Carrot1001

執行結果參考畫面:



JPD06_1.java 檔案下載

程式碼:

abstract class Food {
	int amount, calorie;
	
	Food(int amount) {
		this.amount = amount;
	}
	
	void setCaloriePerGram(int calorie) {
		this.calorie = calorie;
	}
	
	int getAmount() {
		return amount;
	}
	
	int getCalorie() {
		return calorie * amount;
	}
}

class Rice extends Food {
	Rice(int amount) {
		super(amount);
		setCaloriePerGram(1);
	}
}

class Egg extends Food {
	Egg(int amount) {
		super(amount);
		setCaloriePerGram(2);
	}
}

class Cabbage extends Food {
	Cabbage(int amount) {
		super(amount);
		setCaloriePerGram(1);
	}
}

class PorkRib extends Food {
	PorkRib(int amount) {
		super(amount);
		setCaloriePerGram(10);
	}
}

class Carrot extends Food {
	Carrot(int amount) {
		super(amount);
		setCaloriePerGram(1);
	}
}

class JPA06_1
{
    public static void main(String args[])
    {
        Rice rice = new Rice(100);
        System.out.println( rice.getAmount() + " grams of rice has " + rice.getCalorie() + " calories.");
        
        Egg egg = new Egg(30);
        System.out.println( egg.getAmount() + " grams of egg has " + egg.getCalorie() + " calories.");
        
        Cabbage cabbage = new Cabbage(50);
        System.out.println( cabbage.getAmount() + " grams of cabbage has " + cabbage.getCalorie() + " calories.");
        
        PorkRib porkRib = new PorkRib(300);
        System.out.println( porkRib.getAmount() + " grams of pork rib has " + porkRib.getCalorie() + " calories.");
        
        Carrot carrot = new Carrot(100);
        System.out.println( carrot.getAmount() + " grams of carrot has " + carrot.getCalorie() + " calories.");  
    }
}

JPA06_1.java 檔案下載



題目二:

題目說明:

請開啟 JPD06_2.java,設計兩種便當菜色,並計算其總熱量,請依下列題意完成作答。將 JPD06_2.java 内的 class JPD06_2 修改為 class JPA06_2,將檔案另存為 JPA06_2.java 後編譯為 JPA06_2.class,所有題目中有使用到的類別也請編譯後一併儲存。

設計說明:

(1) 請設計一個 LunchBox (便當) 的類別,其資料屬性與方法要求如下。

(2) 資料屬性:
a. calorie:型態為整數 (int),代表該便當的熱量。
b. content:代表便當所含的菜色,請使用 Vector 來儲存。

(3) 方法:
a. add:傳入一個 Food 類別的物件並將之存放到 content 中。
b. getCalorie:計算該便當所含菜色的總熱量。

(4) 新增兩種 economy 及 valued-choice 不同的便當,並計算其所含之熱量。

類別RiceEggCabbageProkRibCarrot
economy200g100g250g
valued-choice200g30g100g300g

執行結果參考畫面:



JPD06_2.java 檔案下載

程式碼:

import java.util.Vector;

abstract class Food {
	int amount, calorie;
	
	Food(int amount) {
		this.amount = amount;
	}
	
	void setCaloriePerGram(int calorie) {
		this.calorie = calorie;
	}
	
	int getAmount() {
		return amount;
	}
	
	int getCalorie() {
		return calorie * amount;
	}
}

class Rice extends Food {
	Rice(int amount) {
		super(amount);
		setCaloriePerGram(1);
	}
}

class Egg extends Food {
	Egg(int amount) {
		super(amount);
		setCaloriePerGram(2);
	}
}

class Cabbage extends Food {
	Cabbage(int amount) {
		super(amount);
		setCaloriePerGram(1);
	}
}

class PorkRib extends Food {
	PorkRib(int amount) {
		super(amount);
		setCaloriePerGram(10);
	}
}

class Carrot extends Food {
	Carrot(int amount) {
		super(amount);
		setCaloriePerGram(1);
	}
}

class LunchBox {
	int calorie;
	Vector<Food> content = new Vector();
	
	void add(Food food) {
		content.add(food);
	}
	
	int getCalorie() {
		int totalCalorie = 0;
		
		for(Food food : content)
			totalCalorie += food.getCalorie();
		return totalCalorie;
	}
}

class JPA06_2
{
    public static void main(String args[])
    {
        LunchBox economy = new LunchBox();
        economy.add(new Rice(200));
        economy.add(new Cabbage(100));
        economy.add(new PorkRib(250));
        System.out.println("Total calories of an economy lunch box are " + economy.getCalorie() +".");
        
        LunchBox valuedChoice = new LunchBox();
        valuedChoice.add(new Rice(200));
        valuedChoice.add(new Egg(30));
        valuedChoice.add(new Carrot(100));
        valuedChoice.add(new PorkRib(300));
        System.out.println("Total calories of a valued-choice lunch box are " + valuedChoice.getCalorie()+".");
        
    }
}

JPA06_2.java 檔案下載



題目三:

題目說明:

請開啟 JPD06_3.java,設計取得便當的熱量及售價的程式,請依下列題意完成作答。將 JPD06_3.java 内的 class JPD06_3 修改為 class JPA06_3,將檔案另存為 JPA06_3.java 後編譯為 JPA06_3.class,所有題目中有使用到的類別也請編譯後一併儲存。

設計說明:

(1) 為各項菜色增加 unitCost (單位成本) 屬性,其型態為整數 (int),代表每公克之成本,增加 settUnitCost 方法以設定此屬性。

(2) 為各項菜色增加 getCost 方法,以取得該菜色的成本 (即 unitCost * amount)。

(3) 為便當增加 priceRatio 變數,表示該便當的售價為:所含菜色的 cost 總和 * PriceRatio。

(4) 為便當增加一個 getPrice 方法,以取得該便當的售價。 (此方法的傳回值型態為 double)。

(5) 便當類別:

priceRatio類別RiceEggCabbageProkRibCarrot
1.2economy200g100g250g
1.3valued-choice200g30g100g300g

(6) 菜色成本:

菜色名稱每公克成本
Rice1
Egg2
Cabbage3
ProkRib8
Carrot3

(7) 完成兩種便當的設計,並印出所具備的熱量與售價。

執行結果參考畫面:



JPD06_3.java 檔案下載

程式碼:

import java.util.Vector;

abstract class Food {
	int amount, calorie, unitCost;
	
	Food(int amount) {
		this.amount = amount;
	}
	
	void setCaloriePerGram(int calorie) {
		this.calorie = calorie;
	}
	
	int getAmount() {
		return amount;
	}
	
	int getCalorie() {
		return calorie * amount;
	}
	
	void setUnitCost(int unitCost) {
		this.unitCost = unitCost;
	}
	
	int getCost() {
		return unitCost * amount;
	}
}

class Rice extends Food {
	Rice(int amount) {
		super(amount);
		setCaloriePerGram(1);
		setUnitCost(1);
	}
}

class Egg extends Food {
	Egg(int amount) {
		super(amount);
		setCaloriePerGram(2);
		setUnitCost(2);
	}
}

class Cabbage extends Food {
	Cabbage(int amount) {
		super(amount);
		setCaloriePerGram(1);
		setUnitCost(3);
	}
}

class PorkRib extends Food {
	PorkRib(int amount) {
		super(amount);
		setCaloriePerGram(10);
		setUnitCost(8);
	}
}

class Carrot extends Food {
	Carrot(int amount) {
		super(amount);
		setCaloriePerGram(1);
		setUnitCost(3);
	}
}

class LunchBox {
	int calorie;
	double priceRatio;
	Vector<Food> content = new Vector();
	
	void add(Food food) {
		content.add(food);
	}
	
	int getCalorie() {
		int totalCalorie = 0;
		
		for(Food food : content)
			totalCalorie += food.getCalorie();
		return totalCalorie;
	}
	
	void setPriceRatio(double priceRatio) {
		this.priceRatio = priceRatio;
	}
	
	double getPrice() {
		double totalPrice = 0;
		
		for(Food food : content)
			totalPrice += food.getCost() * priceRatio;
		return totalPrice;
	}
}

class JPA06_3
{
    public static void main(String args[])
    {
        LunchBox economy = new LunchBox();
        economy.add(new Rice(200));
        economy.add(new Cabbage(100));
        economy.add(new PorkRib(250));
        economy.setPriceRatio(1.2);
        System.out.println("Total calories of an economy lunch box are " + economy.getCalorie());
        System.out.println("The price of an economy lunch box is " + economy.getPrice());
        
        LunchBox valuedChoice = new LunchBox();
        valuedChoice.add(new Rice(200));
        valuedChoice.add(new Egg(30));
        valuedChoice.add(new Carrot(100));
        valuedChoice.add(new PorkRib(300));
        valuedChoice.setPriceRatio(1.3);
        System.out.println("Total calories of a valued-choice lunch box are " + valuedChoice.getCalorie());
        System.out.println("The price of a valued-choice lunch box is " + valuedChoice.getPrice());        
    }
}

JPA06_3.java 檔案下載



題目四:

題目說明:

請開啟 JPD06_4.java,提供比較兩個便當何者較便宜的方法,請依下列題意完成作答。將 JPD06_4.java 内的 class JPD06_4 修改為 class JPA06_4,將檔案另存為 JPA06_4.java 後編譯為 JPA06_4.class,所有題目中有使用到的類別也請編譯後一併儲存。

設計說明:

(1) 請修改 LunchBox 類別,提供名稱為 isCheaperThan 的方法,比較兩個便當何者較便宜。

執行結果參考畫面:



JPD06_4.java 檔案下載

程式碼:

import java.util.Vector;

abstract class Food {
	int amount, calorie, unitCost;
	
	Food(int amount) {
		this.amount = amount;
	}
	
	void setCaloriePerGram(int calorie) {
		this.calorie = calorie;
	}
	
	int getAmount() {
		return amount;
	}
	
	int getCalorie() {
		return calorie * amount;
	}
	
	void setUnitCost(int unitCost) {
		this.unitCost = unitCost;
	}
	
	int getCost() {
		return unitCost * amount;
	}
}

class Rice extends Food {
	Rice(int amount) {
		super(amount);
		setCaloriePerGram(1);
		setUnitCost(1);
	}
}

class Egg extends Food {
	Egg(int amount) {
		super(amount);
		setCaloriePerGram(2);
		setUnitCost(2);
	}
}

class Cabbage extends Food {
	Cabbage(int amount) {
		super(amount);
		setCaloriePerGram(1);
		setUnitCost(3);
	}
}

class PorkRib extends Food {
	PorkRib(int amount) {
		super(amount);
		setCaloriePerGram(10);
		setUnitCost(8);
	}
}

class Carrot extends Food {
	Carrot(int amount) {
		super(amount);
		setCaloriePerGram(1);
		setUnitCost(3);
	}
}

class LunchBox {
	int calorie;
	double priceRatio;
	Vector<Food> content = new Vector();
	
	void add(Food food) {
		content.add(food);
	}
	
	int getCalorie() {
		int totalCalorie = 0;
		
		for(Food food : content)
			totalCalorie += food.getCalorie();
		return totalCalorie;
	}
	
	void setPriceRatio(double priceRatio) {
		this.priceRatio = priceRatio;
	}
	
	double getPrice() {
		double totalPrice = 0;
		
		for(Food food : content)
			totalPrice += food.getCost() * priceRatio;
		return totalPrice;
	}
	
	String isCheaperThan(LunchBox lunchbox) {
		if(this.getPrice() < lunchbox.getPrice())
			return "YES!";
		else
			return "NO!";
	}
}

class JPA06_4
{
    public static void main(String args[])
    {
        LunchBox economy = new LunchBox();
        economy.add(new Rice(200));
        economy.add(new Cabbage(100));
        economy.add(new PorkRib(250));
        economy.setPriceRatio(1.2);
        
        LunchBox valuedChoice = new LunchBox();
        valuedChoice.add(new Rice(200));
        valuedChoice.add(new Egg(30));
        valuedChoice.add(new Carrot(100));
        valuedChoice.add(new PorkRib(300));
        valuedChoice.setPriceRatio(1.3);

        System.out.println("Is the economy lunch box cheaper than the valued-choice? " + economy.isCheaperThan(valuedChoice));
        
    }
}

JPA06_4.java 檔案下載



題目五:

題目說明:

請開啟 JPD06_5.java,請設計一個 SaleReport (銷售紀錄) 類別,以儲存便當的銷售紀錄,請依下列題意完成作答。將 JPD06_5.java 内的 class JPD06_5 修改為 class JPA06_5,將檔案另存為 JPA06_5.java 後編譯為 JPA06_5.class,所有題目中有使用到的類別也請編譯後一併儲存。

設計說明:

(1) 利用 ArrayList 以儲存所銷售的便當。每銷售一個便當,便呼叫 add 方法將所銷售的便當物件加以存放。

(2) 設計一個可計算總銷售便當個數的方法,名稱為 getNumberOfLunchBox。

(3) 設計一個可計算銷售便當的利潤 (售價 – 成本) 的方法,其名稱為 getProfit,顯示此兩個便當的總利潤。

執行結果參考畫面:



JPD06_5.java 檔案下載

程式碼:

import java.util.*;

abstract class Food {
	int amount, calorie, unitCost;
	
	Food(int amount) {
		this.amount = amount;
	}
	
	void setCaloriePerGram(int calorie) {
		this.calorie = calorie;
	}
	
	int getAmount() {
		return amount;
	}
	
	int getCalorie() {
		return calorie * amount;
	}
	
	void setUnitCost(int unitCost) {
		this.unitCost = unitCost;
	}
	
	int getCost() {
		return unitCost * amount;
	}
}

class Rice extends Food {
	Rice(int amount) {
		super(amount);
		setCaloriePerGram(1);
		setUnitCost(1);
	}
}

class Egg extends Food {
	Egg(int amount) {
		super(amount);
		setCaloriePerGram(2);
		setUnitCost(2);
	}
}

class Cabbage extends Food {
	Cabbage(int amount) {
		super(amount);
		setCaloriePerGram(1);
		setUnitCost(3);
	}
}

class PorkRib extends Food {
	PorkRib(int amount) {
		super(amount);
		setCaloriePerGram(10);
		setUnitCost(8);
	}
}

class Carrot extends Food {
	Carrot(int amount) {
		super(amount);
		setCaloriePerGram(1);
		setUnitCost(3);
	}
}

class LunchBox {
	int calorie;
	double priceRatio;
	Vector<Food> content = new Vector();
	
	void add(Food food) {
		content.add(food);
	}
	
	int getCalorie() {
		int totalCalorie = 0;
		
		for(Food food : content)
			totalCalorie += food.getCalorie();
		return totalCalorie;
	}
	
	void setPriceRatio(double priceRatio) {
		this.priceRatio = priceRatio;
	}
	
	double getPrice() {
		double totalPrice = 0;
		
		for(Food food : content)
			totalPrice += food.getCost() * priceRatio;
		return totalPrice;
	}
	
	String isCheaperThan(LunchBox lunchbox) {
		if(this.getPrice() < lunchbox.getPrice())
			return "YES!";
		else
			return "NO!";
	}
	
	int getCost() {
		int totalCost = 0;

		for(Food food : content)
			totalCost += food.getCost();
		return totalCost;
	}
}

class SaleReport {
	ArrayList<LunchBox> arraylist = new ArrayList();
	
	void add(LunchBox lunchbox) {
		arraylist.add(lunchbox);
	}
	
	int getNumberOfLunchBox() {
		return arraylist.size();
	}
	
	int getProfit() {
		int profit = 0;
		
		for(LunchBox lunchbox : arraylist)
			profit += lunchbox.getPrice() - lunchbox.getCost();
		return profit;
	}
}

class JPA06_5
{
    public static void main(String args[])
    {
        LunchBox economy = new LunchBox();
        economy.add(new Rice(200));
        economy.add(new Cabbage(100));
        economy.add(new PorkRib(250));
        economy.setPriceRatio(1.2);
        
        LunchBox valuedChoice = new LunchBox();
        valuedChoice.add(new Rice(200));
        valuedChoice.add(new Egg(30));
        valuedChoice.add(new Carrot(100));
        valuedChoice.add(new PorkRib(300));
        valuedChoice.setPriceRatio(1.3);
        
        SaleReport sr = new SaleReport();
        sr.add(economy);
        sr.add(valuedChoice);
        System.out.println( sr.getNumberOfLunchBox() + " lunch boxes have been sold.");
        System.out.println("Profit is " + sr.getProfit() + ".");
        
    }
}

JPA06_5.java 檔案下載



TQC+ 物件導向程式語言 Java 6 第六類:物件導向程式設計與例外處理




如果覺得文章內容還不錯的話,麻煩請幫我點個讚!感謝

可以多點幾次喔~~

第一次點讚需使用 Google 或 Facebook 帳號註冊

發表迴響