TQC+ 物件導向程式語言 Java 6 608 食物熱量計算
題目前後相關,請閱讀完這個題組的五個題目之後再作答,每題答案皆能獨立執行。請將需要重複或共同使用的程式片段撰寫成函式,以供在類別中呼叫使用,避免在不同的類別中重複寫相同的程式碼,否則將酌量扣分。
題目一:
題目說明:
請開啟檔案 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 方法後印出傳回值。
類別名稱 | 份量 (公克) | 單位熱量 (每公克) |
---|---|---|
Rice | 100 | 1 |
Egg | 30 | 2 |
Cabbage | 50 | 1 |
ProkRib | 300 | 10 |
Carrot | 100 | 1 |
執行結果參考畫面:
程式碼:
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.");
}
}
題目二:
題目說明:
請開啟 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 不同的便當,並計算其所含之熱量。
類別 | Rice | Egg | Cabbage | ProkRib | Carrot |
---|---|---|---|---|---|
economy | 200g | — | 100g | 250g | — |
valued-choice | 200g | 30g | 100g | 300g | — |
執行結果參考畫面:
程式碼:
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()+".");
}
}
題目三:
題目說明:
請開啟 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 | 類別 | Rice | Egg | Cabbage | ProkRib | Carrot |
---|---|---|---|---|---|---|
1.2 | economy | 200g | — | 100g | 250g | — |
1.3 | valued-choice | 200g | 30g | 100g | 300g | — |
(6) 菜色成本:
菜色名稱 | 每公克成本 |
---|---|
Rice | 1 |
Egg | 2 |
Cabbage | 3 |
ProkRib | 8 |
Carrot | 3 |
(7) 完成兩種便當的設計,並印出所具備的熱量與售價。
執行結果參考畫面:
程式碼:
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());
}
}
題目四:
題目說明:
請開啟 JPD06_4.java,提供比較兩個便當何者較便宜的方法,請依下列題意完成作答。將 JPD06_4.java 内的 class JPD06_4 修改為 class JPA06_4,將檔案另存為 JPA06_4.java 後編譯為 JPA06_4.class,所有題目中有使用到的類別也請編譯後一併儲存。
設計說明:
(1) 請修改 LunchBox 類別,提供名稱為 isCheaperThan 的方法,比較兩個便當何者較便宜。
執行結果參考畫面:
程式碼:
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));
}
}
題目五:
題目說明:
請開啟 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,顯示此兩個便當的總利潤。
執行結果參考畫面:
程式碼:
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() + ".");
}
}