1.設類別Caaa的定義為:
class Caaa
{
int a;
int b;
int c;
}
試在程式碼裡完成下列各敘述:
(a) 試在main()函數裡建立一個Caaa類別型態的物件obj;
(b)將obj資料成員a的值設為5,b的值設為3。
(c)計算a*b之後設給成員c。
(d)印出a b 與c的值。
ans
class Caaa
{
int a;
int b;
int c;
}
public class eel
{
public static void main(String args[])
{
Caaa obj;
obj= new Caaa();
obj.a=5;
obj.b=3;
obj.c=obj.a*obj.b;
System.out.print("a="+obj.a+" "+"b="+obj.b+" "+"c="+obj.c);
}
}
2.設類別Cbbb的定義為:
class Cbbb
{
double x;
double y;
}
試在程式碼裡完成下列各敘述 :
(a)試在main() 函數裡建立Cbbb 類別型態的物件obj1 obj2與avg
(b)將 obj1 資料成員x的值設為5.2,y的值設為3.9。
(c)將 obj2 資料成員x的直設為6.5,y的值設為4.6。
(d)將 obj1 與 obj2的x的值平均後,指定給avg的x存放。
(e)將 obj1 與 obj2的y的值平均後,指定給avg的y存放。
(f)印出obj1 obj2與avg的值
ans
class Cbbb
{
double x;
double y;
}
public class eel
{
public static void main(String args[])
{
Cbbb obj1,obj2;
obj1=new Cbbb();
obj2=new Cbbb();
Cbbb avg = new Cbbb();
obj1.x=5.2;
obj1.y=3.9;
obj2.x=6.5;
obj2.y=4.6;
avg.x=(obj1.x+obj2.x)/2;
avg.y=(obj1.y+obj2.y)/2;
System.out.println("obj1="+obj1);
System.out.println("obj2="+obj2);
System.out.println("avg="+avg);
}
}
印出
obj1=Cbbb@15db9742
obj2=Cbbb@6d06d69c
avg=Cbbb@7852e922
3. 設類別Cddd的定義為:
class Cddd
{
Strring name;
double height;
double weight;
}
(a) 試在main() 函數裡建立Cddd 類別型態的物件 student。
(b) 將student資料成員name設質為"Sandy",height的值設為165.5(單位為公分),
weight的值設為58.2(單位為公斤)。
(c)利用BMI=weight(kg)/height^2(M)計算此學生的身體質量指數BMI值。
(d)印出student 的資料及BMI值。
ans
class Cddd
{
String name;
double height;
double weight;
}
public class eel
{
public static void main(String args[])
{
Cddd student;
student=new Cddd();
student.name = "Sandy";
student.height = 1.655;
student.weight = 58.2;
double BMI;
BMI=student.weight/(student.height*student.height);
System.out.println("student "+student.name+" H="+student.height+" w="+student.weight);
System.out.println("BMI="+BMI);
}
}
印出
student Sandy H=1.655 w=58.2
BMI=21.248436943802993
4.請在下面的程式中填上適當的程式碼,使得物件box的length成員可被設為15,width成員可被設為10,height=25。
// hw8_4, 類別的練習
class CBox
{
int length;
int width;
int height;
}
public class hw8_4
{
public static void main(String arge[])
{
CBox box;
box=new CBox();
//請於此處填上程式碼
box.length=15;
box.width=10;
box.heigh=25;
System.out.println("length= "+box.length);
System.out.println("width= "+box.width);
System.out.println("height="+ box.heigh);
}
}
5.假設我們要設計一個Cbox類別,用來表示立體的箱子(box)。此類別內含長(length) 寬(width) 與高(height) 三個資料成員,其類別程式碼的撰寫如下:
class Cbox
{
int length;
int width;
int height;
}
(a)試在main()函數裡,以Cbox類別建立一個box物件,並將其length width height 三個資料成員的值均設為1。
(b)試在Cbox類別裡,定義volume() 函數,用來傳回box物件的體積。
(c)試在Cbox類別裡,定義surfaceArea()函數,用來傳回box物件的表面積。
(d)試在Cbox類別裡,加入showData() 函數,用來顯示box物件length width height 三個資料成員的值
(e)試在Cbox類別裡,加入showAll() 函數,用來顯示box物件length width height 三個資料成員的值,以及其表面積與體積。
ans
class Cbox
{
int length;
int width;
int height;
void volume()
{
System.out.println("volume="+length*width*height);
}
void surfaceArea()
{
System.out.println("surfaceArea="+(length+width+height));
}
void showData()
{
System.out.println("length="+length);
System.out.println("width="+width);
System.out.println("height="+height);
}
void showAll()
{
showData();
surfaceArea();
volume();
}
}
public class eel
{
public static void main(String args[])
{
Cbox box=new Cbox();
box.length=1;
box.width=1;
box.height=1;
box.showAll();
}
}
//印出
length=1
width=1
height=1
surfaceArea=3
volume=1
6.假設我們要設計一個圓形類別CCircle。此類別內涵圓周率(pi)與半徑(radius)二個資料成員,以及show_periphery()函數成員,用來計算並列印圓周長,其類別程式碼的撰寫如下:
class CCircle
{
double pi3.14;
double radius;
viod show_periphery()
{
system.out.println("periphery="+2*pi*radius);
}
}
試在程式碼裡面完成下列各敘述:
(a) 試在main() 函數裡建立一個 CCircle 類別型態的物件 cir1。
(b)在 main() 函數裡將cir1 資料成員的值設為3.0。
(c)利用關鍵字 this 修改CCircle 類別裡的函數成員。
(d)在 main() 函數裡呼叫 show_periphery() 函數。
ans
class CCircle
{
double pi=3.14;
double radius;
void show_periphery()
{
System.out.println("periphery="+2*pi*this.radius);
//this 是物件cirl1 因為不能cirl.show...() 無法直接拿到類別來
}
}
public class eel
{
public static void main(String args[])
{
CCircle cirl1=new CCircle();
cirl1.radius=3.0;
cirl1.show_periphery();
}
}
印出
periphery=18.84
7.試設計一類別 CTest,內含-test() 函數,可以用來判別傳入的值奇數還是偶數,如果為奇數則列印出"此數為奇數",反之若為偶數則印出"此為偶數";若輸入的數為0,則印出"此數為0"。請利用test(),判斷3 8與0各為何數。
ans
class CTest
{
int x;
void test(int x)
{
if(x%2==1) System.out.println("此數為奇數"); else if (x==0) System.out.println("此數為0"); else System.out.println("此數為奇數");
}
}
public class eel
{
public static void main(String args[])
{
CTest ss=new CTest();
System.out.println("test(0)");
ss.test(0);
System.out.println("test(3)");
ss.test(3);
System.out.println("test(8)");
ss.test(8);
}
}
8.試設計一類別 CTest,內含-test()函數,可以用來判別傳入的值是否大於0,如果大於0則吟出"此數為正數",反之若為小於0的數則印出"此數為負數"; 若輸入的數為0,則印出"此數為0"。請利用test(),判斷-4 8與0各為何數。
ans
class CTest
{
int x;
void test(int x)
{
if(x>0)
System.out.println("此數為正數");
else if (x==0)
System.out.println("此數為0");
else
System.out.println("此數為負數");
}
}
public class eel
{
public static void main(String args[])
{
CTest ss=new CTest();
System.out.println("test(0)");
ss.test(0);
System.out.println("test(-4)");
ss.test(-4);
System.out.println("test(8)");
ss.test(8);
}
}
印出
test(0)
此數為0
test(-4)
此數為負數
test(8)
此數為正數
9.試設計一個CCalculator類別,資料成員包括a b 及c,型態為int。請建立該類別的物件obj,並完成下列的各函數的程式設計:
(a)定義set_value(int x,int y,int z)函數,用來設定資料成員之值,將x設值為25,y設值為3,z設值為7。
(b)定義show() 函數,可用來列印所有資料成員。
(c)定義add()函數,可用來傳回三數之和。
(d)定義sub() 函數,可用來傳回a-b-c之值。
(e)定義mul()函數,可用來傳回三數之乘積。
(f)定義avg() 函數,可用來傳回三數之平均值,傳回值型態請設為double。
class CCalculator
{
int a;
int b;
int c;
void set_value(int x,int y,int z)
{
x=25;//obj.set_value()裡面是000預設值,是在main裡輸入的
y=3;
z=7;
}
void show()
{
System.out.print(a+" "+b+" "+c);
}
int add()
{
return a+b+c;
}
int sub()
{
return a-b-c;
}
int mul()
{
return a*b*c;
}
int avg()
{
return (a+b+c)/3;
}
}
public class eel
{
public static void main(String args[])
{
CCalculator obj=new CCalculator();
obj.a=25; obj.b=3; obj.c=7;
obj.show();
obj.add();
}
}
10.在定義setCircle() 函數的多載時,下列兩行setCircle()的多載是否正確?為什麼?
void setCircle(double radius);
int setCircle(double radius);
ans
正確 用一個函數多個引述再根據引數的資料型態不同來設計不同功能。
11.試問在列哪一個選項可以呼叫 void set(int r)這個函數?
(a) set("hello");
(b)set(50);
(c)set(10,25);
(d)set(3.14);
ans
b 引述int
12.假設我們要設計一個CWin類別,用來表示一個視窗(window)的基本外觀。此類別內含寬(width) 高(height)與名稱(name)三個資料成員,部分程式碼撰寫如下:
//hw8_12, 視窗類別
class CWin
{
int width;
int height;
String name;
void setWindows(int w,int h)
{
width=w;
height=h;
}
void setWindows(int w,int h,String s)
{
width=w;
height=h;
name=s;
}
void setW(int w) //設定寬度的函數
{
//請在此處填上程式碼
width=w;
}
void setH(int h) //設定高度的函數
{
//請在此處填上程式碼
height=h;
}
void setName(String s) //設定視窗名稱的函數
{
name=s;
}
public void show()
{
System.out.println("Name="+name);
System.out.println("W="+width+", H="+height);
}
}
public class eel
{
public static void main (String args[])
{
CWin cw=new CWin();
cw.setName("My Window");
cw.setW(5);
cw.setH(3);
cw.show();
}
}
(a)於上面的程式碼中,SetW()與Set H() 兩個函數並沒有填上程式碼。試將他們完成,使得它們可以用來設定CWin物件的width與height成員的值。
(b)試加入setWindow(int w,int h)函數,使得它可以同時設定Cwin物件的width與height。
(c)接續上題,請多載setWindow() 函數,使得他可以同時設定CWin物件的width height 與name 三個資料成員。
13. 設有一CCircle類別,可用來表示一個圓形。此類別內含三個多載的函數成員,用來計算圓面積。試在程式碼裡完成下列各敘述:
(a) 試加入 area(double r) 函數,使得它計算 CCircle 物件的面積,其傳回值型態為double。
(b) 請多載area(float r) 函數,使得它計算 CCircle物件的面積,其傳回值型態為float。
(c) 請多載area(int r)函數,使得它計算CCircle物件的面積,其傳回值型態為double。
(d) 請於main()中分別呼叫 area(2) area(2.2f)與 area(2.2),並印出傳回值。
ans
class CCircle
{
double area;
double area(double r)
{
area=r*r*3.14;
return (double)area;
}
float area(float r)
{
area=r*r*3.14;
return (float) area;
}
int area(int r)
{
area=r*r*3.14;
return (int) area;
}
public void show()
{
System.out.println("area="+area);
}
}
public class eel
{
public static void main (String args[])
{
CCircle a=new CCircle();
a.area(2);
a.show();//必須將show逐行插入才能三列印,無法一次列印
a.area(2.2f);
a.show();
a.area(2.2);
a.show();
}
}
//印出
area=12.56
area=15.197600479125978
area=15.197600000000003
14.於app8_6中,如果把pi與radius資料成員的屬性設為private,怎編譯時是否會得到錯誤訊息?如果會,是指出其錯誤所在。
ans
程式請參考 hw8_13.java。編譯後的錯誤訊息為 radius has private access in CCircle。由於 pi 及 radius 的屬性設為private,因此不能從 CCircle 以外的類別中呼叫。
01 // hw8_13
02 class CCircle
03 {
04 private double pi=3.14;
05 private double radius;
06
07 void show_area()
08 {
09 System.out.println("area="+pi*radius*radius);
10 }
11 void show_all()
12 {
13 System.out.println("radius="+radius);
14 show_area();
15 }
16 }
17 public class hw8_13
18 {
19 public static void main(String args[])
20 {
21 CCircle cir1=new CCircle();
22
23 cir1.radius=2.0;
24 cir1.show_all();
25 }
26 }
/* output------------------------------
radius has private access in CCircle
--------------------------------------*/
15.在app8_14中,在main() 函數裡是否可以利用cir1物件來呼叫定義在7~10行的area()函數?為什麼?
ans
不行,因為修飾子是private 僅能透過公開成員setRadius(),私有成員radius才得以修改,(似乎只有類別公開成員才能修改私有成員。
class CCircle // 定義類別CCircle
{
private double pi=3.14; // 將資料成員設定為private
private double radius;
private double area() // 定義私有的成員函數area()
{
return pi*radius*radius;
}
public void show_area() // 定義公有的成員函數show_area()
{
System.out.println("area="+ area()); // 呼叫私有成員area()
}
public void setRadius(double r) // 定義公有的成員函數setRadius()
{
if(r>0)
{
radius=r; // 將私有成員radius設為r
System.out.println("radius="+radius);
}
else
System.out.println("input error");
}
}
public class eel
{
public static void main(String args[])
{
CCircle cir1=new CCircle();
cir1.setRadius(-2.0); // 呼叫公有的setRadius() method
cir1.show_area(); // 呼叫公有的show_area() method
}
}
16.設有-CSphere類別,可用來表示一個圓球。此類別內含x,y,z三個資料成員,用來代表圓心的位置,此外有-radius資料成員,代表圓球的半徑。其部分程式碼的撰寫如下:
class CSphere
{
private int x; //圓心的x座標
private int y; //圓心的y座標
private int z; //圓心的z座標
private int radius; //圓心的半徑
}
(a) 試在CSphere類別裡加入setLocation()函數,用來設定圓球之圓心的位置。請將圓心未設定為(3,4,5)。
(b)在CSphere類別裡加入setRadius()函數,用來設定圓球之半徑。請設定半徑為1。
(c)在CSphere類別裡加入surfaceArea()函數,用來傳回CSphere物件的表面積。
(d)在CSphere類別裡加入volume()函數,用來傳回CSphere物件的體積。
(e)在CSphere類別裡加入showCenter()函數,用來顯示CSphere物件之圓心座標。
ans
class CSphere
{
private int x; //圓心的x座標
private int y; //圓心的y座標
private int z; //圓心的z座標
private int radius; //圓心的半徑
void setLocation(int i, int j, int k)
{
x=i; // int x=i 等於在宣告一個x變數 底下印出來的數字是預設值0 故不能有int (int x是引數勿忘)
y=j;
z = k;
}
void setRadius(int r)
{
radius=r;
}
double surfaceArea()
{
return (double)4*3.1416*radius*radius;
}
double volume()
{
return ((double)3.1416*radius*radius);
}
void showCenter()
{
System.out.println("Circle center"+"x="+x+" "+"y="+y+" "+"z="+z+" "+"radius="+radius);
}
}
public class eel
{
public static void main(String args[])
{
CSphere cs=new CSphere();
cs.setLocation(3,4,5);
cs.setRadius(1);
System.out.println("surface area="+cs.surfaceArea());
cs.showCenter();
//印不出radius 因為private r也是
}
}
印出
surface area=12.5664
Circle centerx=3 y=4 z=5 radius=1
17.在習題16中,如果把CSphere類別裡的資料成員之屬性改成public,則對程式的撰寫有何影響? 如此做,對程式的設計有何好處或壞處?
ans
如果屬性改public便可以在 public static void main(String args[])直接以cs.radius設定變數值,如同紅色字提示。如果沒寫public的話,則該成員只能在同一個類別庫裡面被儲存。反之,有的話便可以被其他類別庫所存取。缺點是容易造成錯誤值輸入8-35。
private int radius; //圓心的半徑
}
(a) 試在CSphere類別裡加入setLocation()函數,用來設定圓球之圓心的位置。請將圓心未設定為(3,4,5)。
(b)在CSphere類別裡加入setRadius()函數,用來設定圓球之半徑。請設定半徑為1。
(c)在CSphere類別裡加入surfaceArea()函數,用來傳回CSphere物件的表面積。
(d)在CSphere類別裡加入volume()函數,用來傳回CSphere物件的體積。
(e)在CSphere類別裡加入showCenter()函數,用來顯示CSphere物件之圓心座標。
ans
class CSphere
{
private int x; //圓心的x座標
private int y; //圓心的y座標
private int z; //圓心的z座標
private int radius; //圓心的半徑
void setLocation(int i, int j, int k)
{
x=i; // int x=i 等於在宣告一個x變數 底下印出來的數字是預設值0 故不能有int (int x是引數勿忘)
y=j;
z = k;
}
void setRadius(int r)
{
radius=r;
}
double surfaceArea()
{
return (double)4*3.1416*radius*radius;
}
double volume()
{
return ((double)3.1416*radius*radius);
}
void showCenter()
{
System.out.println("Circle center"+"x="+x+" "+"y="+y+" "+"z="+z+" "+"radius="+radius);
}
}
public class eel
{
public static void main(String args[])
{
CSphere cs=new CSphere();
cs.setLocation(3,4,5);
cs.setRadius(1);
System.out.println("surface area="+cs.surfaceArea());
cs.showCenter();
//印不出radius 因為private r也是
}
}
印出
surface area=12.5664
Circle centerx=3 y=4 z=5 radius=1
17.在習題16中,如果把CSphere類別裡的資料成員之屬性改成public,則對程式的撰寫有何影響? 如此做,對程式的設計有何好處或壞處?
ans
如果屬性改public便可以在 public static void main(String args[])直接以cs.radius設定變數值,如同紅色字提示。如果沒寫public的話,則該成員只能在同一個類別庫裡面被儲存。反之,有的話便可以被其他類別庫所存取。缺點是容易造成錯誤值輸入8-35。