Java2課后習(xí)題參考答案1_第1頁
Java2課后習(xí)題參考答案1_第2頁
Java2課后習(xí)題參考答案1_第3頁
Java2課后習(xí)題參考答案1_第4頁
Java2課后習(xí)題參考答案1_第5頁
已閱讀5頁,還剩40頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

Java2實(shí)用教程(第三版)

課后習(xí)題參考答案

第1章Java入門

1.開發(fā)與運(yùn)行Java程序需要經(jīng)過哪些主要步驟和過程?

答:(1)編寫Java源文件:使用文本編輯器(Edit或記事本),拓展名為.java

(2)編譯Java源文件:使用Java編譯器(javac.exe)o得到字節(jié)碼文件*.class

(3)運(yùn)行Java程序:Java應(yīng)用程序使用Java解釋器(java,exe)執(zhí)行字節(jié)碼文件;

Java小應(yīng)用程序使用支持Java標(biāo)準(zhǔn)的瀏覽器來執(zhí)行。

2.怎樣區(qū)分應(yīng)用程序和小應(yīng)用程序?應(yīng)用程序的主類或小應(yīng)用程序的主類必須用public修飾嗎?

答:①應(yīng)用程序必須有main方法,這個方法是程序執(zhí)行的入口。

小應(yīng)用程序沒有main方法。

②應(yīng)用程序的主類不一定用public修飾:小應(yīng)用程序的主類必須用public修飾。

3.Java程序是由什么組成的?一個程序中必須要有public類嗎?Java源文件的命名規(guī)則是怎樣的?

答:①Java程序由類組成。

②應(yīng)用程序可以沒有public類;小應(yīng)用程序一定有一個類是public類(主類)。

③應(yīng)用程序:如果只有一個類,源文件名與該類的類名相同,拓展名為.java;

有多個類時,如果有public類(最多一個),源文件名與public類的類

名相同,拓展名是.java:沒有public類,源文件名與任何一個類的類名

相同即可,拓展名為.java。

小應(yīng)用程序:源文件名與主類的類名相同,拓展名是.java。

4.在運(yùn)行小程序的HTML文件中可以使用codebase屬性指定小程序的字節(jié)碼所駐留的目錄。如果不使用

codebase屬性,小程序的字節(jié)碼文件必須和運(yùn)行它的HTML文件在同?目錄中。編寫一個小程序并將小程序

的字節(jié)碼存放在某個目錄中,比如C:\5000;把運(yùn)行該小程序的HTML文件(注意其中的codebase屬性):

<appletcode=你的小程序的字節(jié)碼width=200height=300codebase=C:\5000>

</applet>

存放在另?個目錄中。

答:以書中小應(yīng)用程序?yàn)槔M(jìn)行說明:

①編寫Java小應(yīng)用程序源代碼

importjava,applet.*;

importjava.awt.*;

publicclassBoyextendsApplet

publicvoidpaint(Graphicsg)

g.setColor(Color,red);

g.drawString("我,邊喝著咖啡,,邊學(xué)Java呢”,5,30);

g.setColor(Color,blue);

g.drawString("我學(xué)得很認(rèn)真”,10,50);

②將上述代碼命名為Boy.java并進(jìn)行編譯得到Boy.class字節(jié)碼文件;將得到的字節(jié)碼文件存放在

C:\5000文件夾下;

③編寫小應(yīng)用程序的HTML源文件:

<appletcode=Boy.classwdith=200height=300codebase=C:\5000></applet>

④將上述編寫好的代碼命名為Boy.html;并將此文件存放在C:\5000文件夾以外的任意一個文件夾中(如

C:\1000);

⑤運(yùn)行Boy.html。

第2章標(biāo)識符、關(guān)鍵字和數(shù)據(jù)類型

1.什么叫標(biāo)識符?標(biāo)識符的規(guī)則是什么?

答:①用來標(biāo)識類名、變量名、、方法名、類型名、數(shù)組名、文件名的有效字符序列。

②由字母、下劃線、美元符號和數(shù)字組成,并且第一個字符不能是數(shù)字字符,而且關(guān)鍵字不能作為標(biāo)識符。

2.什么叫關(guān)鍵字?請說出5個關(guān)鍵字。

答:①Java語言中已經(jīng)被賦予特定意義的一些單詞。

②classbreakpublicreturnstaticextends等。

3.Java的基本數(shù)據(jù)類型都是什么?

答:boolean(邏輯型)char(字符型)float^double(浮點(diǎn)型)byte^short>int>long(整型)。

4.卜列哪些語句是錯誤的:

intx=8;

byteb=127;

b=x;

答:b=x語句錯誤;原因是高級別的變量賦值給低級別的變量時,一定要用顯式轉(zhuǎn)換即b=(byte)x;o

5.下列程序的輸出結(jié)果是什么?

publicclassE

(

publicstaticvoidmain(Stringargs[])

(

long[]a={l,2,3,41;

long[]b={l0(),200,300,400,500);

b=a;

System,out.printIn(〃數(shù)組b的長度:"+b.length);

System,out.printIn("b[0]="+b[0]);

)

)

答:數(shù)組b的長度:4

b[0]=l

6.上機(jī)運(yùn)行下列程序,注意觀察輸出結(jié)果。

publicclassE

(

publicstaticvoidmain(Stringargs[])

for(inti=20302;i<20322;i++)

System,out.println((char)i);

)

)

}

答:低住佐佑怏體估何他佗余余佚佛作佝佞佟你偷

7.System,out.printIn("你好");可輸出字符串,也可以使用System.out.printin()輸出變量或表達(dá)

式的值,只需使用并置符號“+”將變量、表達(dá)式或一個常數(shù)值與一個字符串并置即可,如:

System.out.printIn(uw+x);System,out.println(“:”+123+“大于"+122);等。上機(jī)調(diào)試下列程序,

注意觀察結(jié)果,特別注意System.out.print()和System.out.printin()的區(qū)別。

publicclassOutputData

(

publicstaticvoidmain(Stringargs[])

(

intx=234,y=432;

System,out.printIn(x+/z<z/+(2*x));

System.out.print("我輸出結(jié)果后不回車");

System.out.prinlln("我輸出結(jié)果后自動車到卜.一行”);

System,out.printin(〃x+y="+(x+y));

System,out.printIn("“+x+y+”=234432");

)

)

答:234<468

我輸出結(jié)果后不回車我輸出結(jié)果后自動回車到下一行

x+y=666

234432=234432

8.編寫個Java應(yīng)用程序,輸出全部的希臘字母。

答:

publicclassXLWords

(

publicstaticvoidmain(Stringargs[])

(

for(inti=913;i<930;i++)

(

System.out.print((char)i〃);

)

for(intj=931;j<938;j++)

(

System,out.print((char)j+z,〃);

}

for(intk=945;k<962;k++)

System,out.print((char)k+^〃);

for(intt=963;t<=969;t++)

System.out.print((char)t+^”);

)

)

)

第3章運(yùn)算符、表達(dá)式和語句

i.下列程序的輸出結(jié)果是什么?

publicclassE

(

publicstaticvoidmain(Stringargs[])

(

charx='你,,y二'e,z二,吃,;

if(x>'A')

(

y='愛';

情';

)

else

y='我';

保她';

System,out.print1n('“+x+y+z);

)

)

答:你愛她

2.下列程序的輸出結(jié)果是什么?

publicclassE3

(

publicstaticvoidmain(Stringargs[])

(

charc=,\0';

for(inti=l;i<=4;i++)

(

switch(i)

(

case1:c=,b';

System.out.print(c);

case2:c=,e>;

System,out.print(c);

break;

case3:c=,p';

System,out.print(c);

default:

System,out.print("!");

}

)

}

}

答:beep!!

3.編寫應(yīng)用程序,求1!+2!+-+10!.

答:

classFact

(

publicstaticvoidmain(Stringargs[])

(

intfact,sum=0;

for(inti=l;i<=10;i++)

(

fact=l;

for(intj=l;j<=i;j++)

fact*=j;

sum+=fact;

}

System,out.「14"111("1到10的階乘之和是:"+51?1);

}

}

4.編寫一個應(yīng)用程序,求100以內(nèi)的全部素數(shù)。

答:

classPrimes

(

publicstaticvoidmain(Stringargs口)

(

intw=l;

for(inti=2;i<=100;i++)

(

for(intj=2;j<i;j++)

(

w=i%j;

if(w==0)

break;

)

if(w!=0)

System,out.println(i+"是素數(shù)");

}

5.分別用do-while和for循環(huán)計算1+1/2!+1/3!+1/4!+…的前20項和。

答:①for循環(huán)

classSum

(

publicstaticvoidmain(Stringargs[])

(

intfact;

doublesum=0;

for(inti=l;i〈=20;i++)

(

fact=l;

for(intj=l;j<=i;j++)

fact*二j;

sum+=l.0/fact;

}

System,out.println(sum);

}

)

②do—whi1e循環(huán)

classSum

{

publicstaticvoidmain(Stringargs[])

(

inti=l;

intfact;

doublesum=0;

do

(

fact=l;

intj=0;

while(++j<=i)

fact*=j;

sum+=l.0/fact;

)

while(++i<=20);

System.out.printIn(sum);

)

}

6.一個數(shù)如果恰好等于它的因子之和,這個數(shù)就稱為“完數(shù)”。編寫應(yīng)用程序,求1000之內(nèi)的所有完數(shù)。

答:

classWanshu

(

publicstaticvoidmain(Stringargs[])

intx,i,sum;

for(x=l;x<=1000;x++)

sum=O;

for(i=l;i<x;i++)

(

if(x%i=O)

sum+=i;

}

if(x==sum)

System.out.printIn(x+〃是完數(shù)”);

)

}

)

7.編寫應(yīng)用程序,分別使用while和for循環(huán)計算8+88+888+…前10項之和。

答:①for循環(huán)

classTheSum

(

publicstaticvoidmain(Stringargs[])

(

longsum=0,data=8;

for(inti=l;i<=10;i++)

(

sum=sum+data;

data=data*10+8;

}

System,out.println(sum);

)

)

②while循環(huán)

classTheSum

(

publicstaticvoidmain(Stringargs[])

(

longsum=0,data=8,i=0;

while(++i<=10)

{

sum=sum+data;

data=data*10+8;

}

System,out.printIn(sum);

}

}

8.編寫應(yīng)用程序,輸出滿足1+2+3+…+n<8888的最大正整數(shù)n。

答:

classMaxn

publicstaticvoidmain(Stringargs[])

{

intk=l,sum=0;

while((sum+=k)<8888)

k++;

k--;

System.out.printIn("最大能取到:"+k);

}

)

第4章類、對象和接口

1.類中的實(shí)例變量在什么時候會被分配內(nèi)存空間?

答:當(dāng)該類創(chuàng)建對象之后,實(shí)例變量才會被分配相應(yīng)的內(nèi)存空間。

2.什么叫方法的重載?構(gòu)造方法可以重載嗎?

答:①一個類中可以有多個方法具有相同的名字,但這些方法的參數(shù)必須不同,即或者是參數(shù)的個數(shù)不同,

或者是參數(shù)的類型不同(方法的重載體現(xiàn)了多態(tài)性,即功能多態(tài)性)。

②構(gòu)造方法可以重載。

3.類中的實(shí)例方法可以操作類變量(static變量)嗎?類方法(static方法)可以操作實(shí)例變量嗎?

答:①類中的實(shí)例方法可以操作類變量。

②類方法不可以操作實(shí)例變量

4.類中的實(shí)例方法可以用類名直接調(diào)用嗎?

答:類中的實(shí)例方法不可以用類名直接調(diào)用。

5.舉例說明protected方法和友好方法的區(qū)別。

答:當(dāng)子類與父類不在同一個包中時,子類可以繼承父類的protected方法;而友好方法此時則不能被子類

繼承。

6.舉例說明類變量和實(shí)例變量的區(qū)別。

答:⑴書寫:定義成員變量時,類變量有static修飾;實(shí)例變量沒有static修飾。

例:classA

(

intx;〃實(shí)例變量

staticinty;〃類變量

}

⑵內(nèi)存:不創(chuàng)建對象,類的實(shí)例變量不會被分配內(nèi)存空間;類變量被分配相應(yīng)的內(nèi)存空間。

不同對象的實(shí)例變量被分配不同的內(nèi)存空間;不同對象的類變量被分配相同的內(nèi)存空間。

任何一個對象改變類變量,其他對象的相應(yīng)類變量也發(fā)生相應(yīng)變化。

一個對象的實(shí)例變量發(fā)生改變,不影響其他對象的相應(yīng)實(shí)例變量。

例:執(zhí)行語句:Al.x=10;Al.y=20;

這時A2.x的值也是10:而A2.y的值保持原來的初值。

⑶使用:類變量可以被類方法操作:而實(shí)例變量不能被類方法操作。

例:classA

intx;

staticinty;

staticvoidfunc0

b=10;〃合法

a=20;〃非法

}

類變量可以通過類名訪問:實(shí)例變量不能通過類名訪問。

例:classA

intx;

staticinty;

classB

publicvoidfunc0;

A.x=10;〃非法

Ay=20;〃合法

}

7.子類將繼承父類的哪些成員變量和方法?子類在什么情況下隱藏父類的成員變量和方法?在子類中是

否允許有一個方法和父類的方法名字相同,而類型不同?

答:①子類和父類在同一個包中時,子類可以繼承父類的除private屬性的所有方法和成員變量,當(dāng)子類與

父類不在同一個包中時.,子類只能繼承父類的protected和public屬性的成員變量和方法。

②子類中定義的成員變量和父類中的成員變量同名時,子類就隱藏了繼承的成員變量;子類中定義一個方

法,并且這個方法的名字、返回類型、參數(shù)個數(shù)和類型與從父類繼承的方法完全相同,子類就隱藏從父類

繼承來的方法(方法的重寫)。

③在子類中允許有一個方法和父類的方法名字相同而類型不同。

8.父類的final方法可以被子類重寫嗎?

答:父類的final方法不能被子類重寫。

9.什么類中可以有abstract方法?

答:abstract類中可以有abstract方法。

10.什么叫對象的上轉(zhuǎn)型對象?

答:B類是A類的子類或間接子類,當(dāng)用子類B創(chuàng)建一個對象b并把這個對象的引用放到A類的對象a中時,稱A

類對象a是子類對象b的上轉(zhuǎn)型對象。

11.什么叫接口的回調(diào)?

答:可以把實(shí)現(xiàn)某一接口的類創(chuàng)建的對象的引用賦給該接口聲明的接口變量中。

12.卜.列程序有什么錯誤?

publicclassTakecare

inta=90;

staticfloatb=10.98f;

publicstaticvoidmain(Stringargs[])

(

floatc=a+b;

System,out.prinlln("c="+c);

)

}

答:語句floatc=a+b;錯誤。原因是類方法main操作了實(shí)例變量a。

13.請寫出卜列程序的輸出結(jié)果。

classA

(

publicintf(intx)

(

returnx+1;

)

I

classBextendsA

(

publicintf(intx)

(

returnx*x;

)

}

publicclassE

(

publicstaticvoidmain(Stringargs[])

(

Aa=newB();

intm=a.f(10);

System,out.printIn(m);

)

}

答:100

14.請寫出下列程序的輸出結(jié)果。

classA

(

intx;

publicvoidsetX(intx)

this.x=x;

}

intgetXO

returnx;

)

)

classB

(

publicvoidf(Aa)

(

a.setX(lOO);

)

)

publicclassE

{

publicstaticvoidmain(Stringargs[])

(

Aa=ne\vA();

a.setX(8);

System,out.println(a.getXO);

Bb=newB();

b.f(a);

System,out.print1n(a.getX());

)

)

答:8

100

15.使用接口有哪些注意事項?模仿例子4.27,編寫一個類實(shí)現(xiàn)兩個接口的程序。

答:①?個類使用接口時,要有implements關(guān)鍵字,當(dāng)個類使用多個接口時,接口名要用逗號“,”隔開;

使用接口的類除abstract類外,必須實(shí)現(xiàn)接口的所有方法,并且實(shí)現(xiàn)接口的方法時,方法名字、返回類型、

參數(shù)個數(shù)及類型必須與接口中的完全致;類在實(shí)現(xiàn)接口時,方法體?定要用public修飾,如果接口方法

的返回類型不是void型,在類中實(shí)現(xiàn)接口時,方法體至少有一個return語句。

②interface表面積

(

doubleallArea(doubler);

}

interface體積

doublevolu(doubler);

classSphimplements表面積,體積

doublePI=3.14159;

publicdoubleallArea(doubler)

(

return4*PI*r*r;

}

publicdoublevolu(doubler)

(

return4.0/3*PI*r*r*r;

}

}

publicclassTest

(

publicstaticvoidmain(Stringargs[])

(

doubler=5.0;

Spha=newSph0;

System,out.printin("半徑為5的球的表面積是:"+a.al1Area(r));

System.out.printIn(“半徑為5的球的體積是:〃+a.volu(r));

}

}

16.編寫一個類A,該類創(chuàng)建的對象可以調(diào)用方法f輸出英文字母表,然后再編寫一個該類的子類B,要求子

類B必須繼承A類的方法f(不允許重寫),了類創(chuàng)建的對象不僅可以調(diào)用方法f輸出英文字母表,而且調(diào)用子

類新增的方法g輸出希臘字母表。

答:classA

(

intm;

voidf()

(

for(m=65;m<91;m++)

System,out.print((char)m+z,〃);

for(m=97;m<123;m++)

System,out.print((char)m+z,");

System.out.printlnC*〃);

)

}

classBextendsA

(

inti;

voidg()

for(i=913;i<930;i++)

System,out.print((char)i+^”);

for(i=931;i<938;i++)

System,out.print((char)〃);

for(i=945;i<962;i++)

System,out.print((char)");

for(i=963;i<970;i++)

System,out.print((char)”);

System,out.printing");

}

}

publicclassTest

(

publicstaticvoidmain(Stringargs[])

(

Bb=ne\vB();

System.out.printIn(“我調(diào)用方法f輸出英文字母表:");

b.f();

System.out.printIn("我調(diào)用方法g輸出希臘字母表:“);

b.g();

}

}

17.編寫個異常類MyException,再編寫?個類Student,該類有?個產(chǎn)生異常的方法publicvoid

speak(intm)throwsMyException,要求參數(shù)m的值大于1000時,方法拋出一個MyException對象。最后編

寫主類,在主類的main方法中用Student創(chuàng)建?個對象,讓該對象調(diào)用speak方法。

答:classMyExceptionextendsException

(

Stringstrl;

MyException(intm)

(

strl=m+"出現(xiàn)錯誤可能造成的原因是取值大于1000〃;

)

publicvoidshowStr1()

(

System.out.printIn(strl);

}

}

classStudent

publicvoidspeak(intm)throwsMyException

if(m>1000)

MyExceptionexception=newMyException(m);

throwexception;

)

else

System.out.printIn(m);

)

}

publicclassTest

publicstaticvoidmain(Stringagrs[])

(

intm;

Studentstul=newStudent();

m=987;

try

(

stul.speak(m);

m=1234;

stul.speak(m);

}

catch(MyExceptione)

(

e.showStr1();

}

)

)

18.編寫?個類,該類有?個方法publicintf(inta,intb),該方法返回a和b的最大公約數(shù)。然后再編

寫一個該類的子類,要求子類重寫方法f,而且重寫的方法將返回a和b的最小公倍數(shù)。要求在重寫的方法的

方法體中首先調(diào)用被隱藏的方法返回a和b的最大公約數(shù)in,然后將乘積(a*b)/m返回。要求在應(yīng)用程序的主

類中分別使用父類和子類創(chuàng)建對象,并分別調(diào)用方法f計算兩個正整數(shù)的最大公約數(shù)和最小公倍數(shù)。

答:classA

(

publicintf(inta,intb)

(

if(a<b)

(

inttemp=0;

temp二a;

a=b;

b二temp;

)

intr=a%b;

while(r!=0)

(

a=b;

b二r;

r=a%b;

}

returnb;

}

)

classBextendsA

publicintf(inta,intb)

{

intm;

m二super,f(a,b);

return(a*b)/m;

}

)

publicclassTest

(

publicstaticvoidmain(Stringargs[])

(

Aa=newA();

System.out.printIn(“18和102的最大公約數(shù)是:"+a.f(18,102));

Bb=newB();

System.out.printin("18和102的最小公倍數(shù)是:"+b.f(18,102));

)

)

第5章字符串

1.使用String類的publicStringtoUpperCaseO方法可以將一個字符串中的小寫字母變成大寫字母,使

用publicStringtoLowerCaseO方法可以將?個字符串中的大寫字母變成小寫字母。編寫?個程序,使用

這兩個方法實(shí)現(xiàn)大小寫的轉(zhuǎn)換。

答:classTest

publicstaticvoidmain(Stringargs[])

Stringstr=〃IcanuseJava”;

System.out.printing要轉(zhuǎn)換的字符串是:"+str);

Strings=str.toUpperCase();

System.out.printin(“轉(zhuǎn)換成大寫字符串是:"+s);

s=str.toLowerCase0;

System.out.printin("轉(zhuǎn)換成小寫字符串是:"+s);

}

)

2.使用String類的publicStringconcat(Stringstr)方法可以把調(diào)用該方法的字符串與參數(shù)指定的字符

串連接,把str指定的串連接到當(dāng)前串的尾部獲得一個新的事。編寫一個程序通過連接兩個半得到一個新申,

并輸出這個新串。

答:classTest

(

publicstaticvoidmain(Stringargs口)

(

Stringstrl="Icanu〃;

Stringstr2=z,seJava”;

Strings=strl.concat(str2);

System.out.printin(〃將字符申〃+strl+〃與字符串〃+slr2+〃連接后得到的新字符串是:〃);

System,out.printIn(s);

}

)

3.String類的publiccharcharAt(intindex)方法可以得到當(dāng)前字符串index位置上的一個字符。說出下

列程序的輸出結(jié)果。

publicclassE3

(

publicstaticvoidmain(Stringargs[])

(

Strings丁中國科學(xué)技術(shù)大學(xué)〃;

chara=s.charAt(2),b=s.charAt(6);

System.out.print(a);

System,out.printIn(b);

)

)

答:科大

4.使用java,util包中的Arrays類的靜態(tài)方法publicstaticvoidsort(doublea口)可以把參數(shù)a指定的

double型數(shù)組按升序排序,使用java,util包中的Arrays類的靜態(tài)方法publicstaticvoidsort(double

a[],intstart,intend)可以把參數(shù)a指定的double型數(shù)組中從位置start到endT位置的數(shù)按升序排序。寫

出下列程序的輸出結(jié)果。

importjava,util.*:

publicclassE4

publicstaticvoidmain(Stringargs[])

(

inta口={23,67,89,90,-987};

doubleb[]={12.89,90.87,34,678.987,-98.78,0.89};

Arrays,sort(a);

Arrays,sort(b,1,4);

for(inti=0;i<=4;i++)

(

System,out.print");

)

for(inti=0;i<b.length;i++)

(

System,out.print(b[i]+",");

)

)

)

答:-987,23,67,89,90,12.89,34.0,90.87,678.987,-98.78,0.89,

5.使用java,lang包中System類的靜態(tài)方法arraycopy可以實(shí)現(xiàn)數(shù)組的快速復(fù)制,上機(jī)實(shí)習(xí)下列程序,并總

結(jié)出arraycopy方法參數(shù)的使用規(guī)則。

publicclassArrayCopy

(

publicstaticvoidmain(Stringargs[])

(

charalg"','c','d;},bl口={」<273','4','5','6'};

System,arraycopy(al,0,bl,1,al.length-1);

System,out.printIn(newString(al));

System,out.printin(newString(bl));

bytea2[]={97,98,99,100,101,102},b2[]=(65,67,68,69,70,71);

System,arraycopy(b2,0,a2,3,b2.length-3);

System,out.printIn(newString(a2));

System.out.printlr)(newString(b2));

)

)

答:①運(yùn)行結(jié)果:abcdef

labcde

abcACD

ACDEFG

②arraycopy的方法是publicstaticvoidarraycopy(Objectsrc,intsrcPos,Objectdest,intdestPos,

intlength)o其中五個參數(shù)分別表示:

src-被復(fù)制的數(shù)組

srcPos-從第幾個元素開始復(fù)制

dest-要復(fù)制到的數(shù)組

destPos-從第幾個元素開始粘貼

length-一共需要復(fù)制的元素個數(shù)

第6章時間、日期和數(shù)字

1.用Data類不帶參數(shù)的構(gòu)造方法創(chuàng)建日期,要求日期的輸出格式是:星期小時分秒。

答:importjava.util.*;

importjava.text.

classTest

(

publicstaticvoidmain(Stringargs[])

(

Date時間:newDate0;

Simp1eDateFormats=newSimpleDateFormat(*EHH時mm分ss秒〃);

System.out.println(s.format(時間));

}

}

2.輸出2006年2月的日歷頁,程序需處理閏年問題。

答:importjava.util.*;

classTest

(

publicstaticvoidmain(Stringargs[])

intyear=2006,month=2;

intallDay;

if((year%4-0&&year%l00!=0)||(year%400==0))

allDay=29;

else

allDay=28;

Calendarfeb=Calendar.getlnstance();

feb.set(2006,1,1);

intdat=feb.get(Calendar.DAY_OF_WEEK)-1;

Stringa[]=newString[dat+allDay];

for(inti=0;i<dat;i++)

{

a[i]="〃;

)

for(inti=dat,n=l;i<(dat+al1Day);i++)

(

if(n<=9)

a[i]=String.valueOf(n)

else

a[i]=String.valueOf(n)+?,

n++;

)

System,out.printIn”+year+“年"+month+“月”);

Syslem.out.prinlln("日一二三四五六”);

for(intj=0;j<a.length;j++)

{

if(j%7==0)

(

System,out.printIn”);

)

System,out.print(a[j]);

)

)

)

3.計算某年、某月、某日和某年、某月、某I」之間的天數(shù)間隔。要求年、月、日通過main方法的參數(shù)傳遞

到程序中。

答:importjava.util.*;

classTest

{

publicstaticvoidmain(Stringargs[])

(

Calendarc=Calendar.getlnstance();

c.set(2000,0,1);

longtimel=c.getTimelnMi11is();

c.set(2008,7,8);

longtime2=c.getTimelnMi11is();

longdayCous=(time2-1ime1)/(1000*60*60*24);

System.out.printIn(“2008年8月8日和2000年1月1日相隔"+dayCous+〃天〃);

)

)

4.編程練習(xí)Math類的常用方法。

答:importjava.text.*;

publicclassTest

(

publicstaticvoidmain(Stringargs[])

{

doublea二Math.abs(-10);

System.out.printIn("TO的絕對值是:"+a);

doublemaxNum=Math.max(123.456,-5.4321);

System.out.printIn("123.456與-5.4321中的最大值是:"+maxNum);

doubleminNum=Math.min(123.456,-5.4321);

System.out.printin(〃123.456與-5.4321.中的最小值是:“+minNum);

intrandomNum=(int)(Math,random()*10)+1;

System,out.口149111(〃輸出一個1到10的隨機(jī)數(shù)是:”+四11加加1111);

doublepowNum=Math.pow(2,10);

System.out.printin(〃2的10次累是:"+powNum);

doublesqrtNum=Math.sqrt(10);

System,out.println("10的平方根是:"+sqrtNum);

doublelogNum=Math.log(2);

System.out.口14瓶1。("2的對數(shù)是:〃+1081^1111);

doublesinNum=Math.sin(-10);

System.out.口1411€111(〃-10的正弦值是:”+510?1加);

doubleasinNum=Math.asin(0.5);

System.out.printIn(^0.5的反正弦值是:"+asinNum);

System,out.printin(〃格式化之前的數(shù)是:"+sqrlNum);

NumberFormatf=NumberFormat.getlnstance0;

f.setMaximumFractionDigits(10);

f.setMinimumIntegerDigits(4);

Strings=f.format(sqrtNum);

System.out.printIn(〃格式化后:"+s);

}

)

5.使用Biginteger類計算1!+3!+5!+7!+…的前30項的和。

答:importjava.math.*;

publicclassTest

(

publicstaticvoidmain(Stringargs[])

Bigintegersum二newBiginteger(^O^),

jieCheng=newBiginteger(T),

ONE二newBiginteger("1"),

i=0NE;

intk=0;

while(++k<=30)

(

sum=sum.add(jieCheng);

i=i.add(0NE);

jieCheng=jieCheng,multiply(i);

i二i.add(ONE);

jieCheng=jieCheng.multiply(i);

System.out.println(sum);

第7章AWT組件及事件處理

1.Frame類對象的默認(rèn)布局是什么布局?和Panel類對象的默認(rèn)布局相同嗎?

答:①Frame類對象的默認(rèn)布局是BorderLayout布局;

②不相同,Pane1類對象的默認(rèn)布局是F1owLayout布局。

2.一個容器對象是否可以使用add方法添加一個Frame窗口?

答:不可以。

3.Checkbox對象可以觸發(fā)IlemEvenl事件嗎?

答:可以。

4.編寫應(yīng)用程序,有一個標(biāo)題為“計算的窗口”的窗口,窗口的布局為FlowLayoul布局。窗口中添加兩個

文本區(qū),當(dāng)我們在一個文本區(qū)中輸入若干個數(shù)時,另一個文本區(qū),同時對輸入的數(shù)進(jìn)行求和運(yùn)算并求出平

均值,也就是說隨著輸入的變化,另一個文本區(qū)不斷地更新求和及平均值。

答:importjava.awt.*;

importjava.awt.event.*;

importjava.util.*;

classCalculatedextendsFrameimplementsTextListener

(

TextAreatextl,text2;〃定義了2個文本區(qū)

Calculated(Strings)//標(biāo)題為“計算的窗口”的窗口

(

super(s);

setLayout(newFlowLayout());〃窗口布局為FlowLayout

textl=newTextArea(5,23);

text2=newTextArea(5,23);

add(textl);

add(text2);

text2.setEditable(false);〃顯示求和結(jié)果和平均值的文本區(qū)禁止編輯

textl.addTextListener(this);

addWindowListener(newWindowAdapter()

(

publicvoidwindowC1osing(WindowEvente)

(

System,exit(0);

}

}

);

setBounds(100,100,400,160);

setVisible(true);

validate();

publicvoidtextValueChanged(TextEvente)

Strings=textl.getText();

StringTokenizergeshu=newStringTokenizer(s);

intn=geshu.countTokensO;

doublea[]=newdouble[n];

for(inti=0;i<n;i++)

(

Stringtemp=geshu.nextTokenO;

doubledate=Double.parseDouble(temp);

a[i]=date;

)

doublesum=0,average;

for(inti=0;i<n;i++)

(

sum=sum+a[i];

)

average=sum/n;

text2.setText(null);

text2.append("和:"+sum+“\n"+"平均數(shù):"+average);

)

)

publicclassTest

(

publicstaticvoidmain(Stringargs[])

(

Calculatedcalc=newCalculated("計算的窗口〃);

)

}

5.文本區(qū)可以使用getSelectedTextO方法獲取該文本區(qū)通過拖動鼠標(biāo)選中的文件。編寫應(yīng)用程序,有一

個標(biāo)題為“挑單詞”的窗口,窗口的布局為BorderLayout布局。窗口中添加兩個文本去和一個按鈕組

件,要求文本區(qū)分別添加到窗口的東部區(qū)域和西部區(qū)域;按鈕添加到窗口的南部區(qū)域,當(dāng)單擊按鈕時,程

序?qū)|部M域的文本區(qū)中鼠標(biāo)選中的內(nèi)容尾加到西部區(qū)域的文本區(qū)中。

答:importjava.awt.*;

importjava.awt.event.*;

classWindowSelectedTextextendsFrameimplementsActionListener

TextAreatextl,text2;〃定義2個文本區(qū)

Buttonbutton;〃定義■個按鈕

WindowSelectedText(Strings)//窗口名字為“挑單詞”

super(s);

setLayout(newBorderLayout0);〃窗口布局是BordcrLayout布局

textl=newTextArea(6,15);

text2=newTextArea(6,15);

button=newButton(“確定");

add(text1,BorderLayout.EAST);

add(text2,BorderLayout.WEST);

add(button,BorderLayout.SOUTH);

button.addActionListener(this);

addWindowListener(newWindowAdapter0

(

publicvoidwindowClosing(WindowEvente)

(

System,exit(0);

}

)

);

text2.setEditable(false);

setBounds(100,100,350,200);

setVisible(true);

validate();

)

publicvoidactionPerformed(ActionEvente)

(

if(e.getSourceO-button)

(

Strings=textl.getSelectedText()+//\n,/;

Stringstr=text2.getText();

text2.setText(str+s);

}

}

)

publicclassTest

publicstaticvoidmain(Stringargs口)

(

newWindowSelectedText("挑單詞耳;

6.編寫一個應(yīng)用程序,有一個標(biāo)題為“計算”的窗口,窗口的布局為FlowLayout布局。設(shè)計4個按鈕,分

別命名為“加”、“差”、“積”、“除”,另外,窗口中還有3個文本框。單擊相應(yīng)的按鈕,將兩個文本

框的數(shù)字做運(yùn)算,在第三個文本框中顯示結(jié)果。要求處理NumberFormalExceplion。

答:importjava.awt.*;

importjava.awt.event.*;

classCalculatedextendsFrameimplementsActionListener

(

TextFieldtextl,text2,text3;//3個文本框

ButtonbuttonH,buttonC,buttonj,buttons;〃4個按鈕

Calculated(Strings)

(

super(s);

setLayout(newFlowLayout());〃FlowLayout布局

textl=newTextField(lO);

text2=newTextField(lO);

text3=newTextField(17);

buttonH=newButton(“加”);

buttonC=newButton(〃差〃);

buttonj=newButton("積");

buttonS=newButton("除“);

add(textl);

add(text2);

add(text3);

text3.setEditable(false);

add(buttonH);

add(buttonC);

add(buttonj);

add(buttons);

buttonH.addActionListener(this);

buttonC.addActionListener(this);

buttonj.addActionListener(this);

buttons.addActionListener(this);

addWindowListener(newWindowAdapter()

publicvoidwindowClosing(WindowEvente)

(

System,exit(0);

)

)

);

setBounds(100,100,160,180);

setVisible(true);

validate();

publicvoidactionPerformed(ActionEvente)

doublenum1=0,num2=0,totle=0;

try

{

numl=Double.parseDouble(text1.getText0);

num2=Double.parseDouble(text2.getText());

if(e.getSource()-buttonH)

(

totle=numl+num2;

text3.setText('和"+totle);

)

elseif(e.getSource()==buttonC)

(

totle=numl-num2;

text3.setText(〃差"+totle);

}

elseif(e.getSource()==buttonj)

{

totle=numl*nuni2;

text3.setText("積"+totle);

}

elseif(e.getSource()-buttons)

{

totle=numl/num2;

text3.setText("商"+totle);

}

)

catch(NumberFormatExceptionevent)

(

text3.setText(〃請輸入數(shù)字字符!〃);

)

}

)

publicclassTest

(

publicstaticvoidmain(Stringargs[])

(

Calculatedcalc=newCalculated("計算");〃標(biāo)題為“計算”的窗口

7.改進(jìn)例子7.16,在程序中增加一個名稱為“確定”的按鈕和一個文本區(qū)。當(dāng)單擊按鈕時,程序驗(yàn)證用戶

是否輸入了合法的E-mail地址格式,如果合法就將用戶輸入的姓名、E-mail和職業(yè)尾加到文本區(qū)中,否則

在輸入E-mail的文本框中提示用戶輸入了非法格式的E-mail地址。

答:importjavax.swing.*;

importjavax.swing,border.*;

importjava.awt.*;

importjava.awt.event.

classWindowBoxextendsFrameimplementsActionListener

(

TextFieldtextl,text2,text3;

TextAreatextarea;

BoxbaseBox,boxVl,boxV2;

Buttonbutton;

WindowBox()

(

button=newButton(“確定");

textarea=newTextArea(6,12);

textl=newTextField(12);

text2=newTextField(12);

text3=newTextField(12);

boxVl=Box.createVerticalBox();

boxVl.add(newLabel("姓名"));

boxVl.add(Box.createVerticalStrut(8));

boxVl.add(newLabel("email"));

boxVl.add(Box.createVerticalStrut(8));

boxVl.add(newLabel(“職業(yè)”));

boxV2=Box.createVerticalBox();

boxV2.add(textl);

boxV2.add(Box.createVerticalStrut(8));

boxV2.add(text2);

boxV2.add(Box.createVerticalStrut(8));

boxV2.add(text3);

baseBox=Box.createHorizontalBox();

baseBox.add(boxVl);

baseBox.add(Box.createHorizontalStrut(10));

baseBox.add(boxV2);

setLayout(newFlowLayout());

add(baseBox);

add(button);

add(textarea);

addWindowListener(newWindowAdapter()

(

publicvoidwindowClosing(WindowEvente)

System,exit(0);

);

textarea.setEditable(false);

button.addActionListener(this);

setBounds(100,100,210,250);

setVisible(true);

validate();

)

publicvoidactionPerformed(ActionEvente)

(

booleana;

intb;

Strings;

if(e.getSource()==button)

(

s=text2.getText();

a=s.endsWith(/z.com");

b=s.indexOf("礦);

if(a&&b>0)

(

Stringstrl=textl.getText()+/z\n,z+text2.getText()+〃\n〃+lexl3.gelText()+“\n”;

Stringstr2=textarea.getText();

textarea.setText(str2+strl);

)

else

(

text2.setTexl(〃輸入了非法格式的E-mail地址”);

)

}

)

}

publicclassTest

{

publicstaticvoidmain(Stringargs[])

{

newWindowBoxO;

)

)

8.寫一個應(yīng)用程序,要求編寫一個Panel的子類MyPanel,MyPanel中有一個文本框和一個按鈕,要求MyPanel

的實(shí)例作為其按鈕的ActionEvent事件的監(jiān)視器,當(dāng)單擊按鈕時,程序獲取文本框中的文本,

并將該文本作為按鈕的名稱。然后在編寫一個Frame的子類,即窗口。窗口的布局為BorderLayout布局。窗

口中添加兩個MyPanel面板,分別添加到窗口的東部區(qū)域和西部區(qū)域。

答:importjava.awt.*;

importjava.awt.event.*;

classMyPanelextendsPanelimplementsActionListener

(

Stringname;

TextFieldtext;

Buttonbutton;

MyPanel()

(

text=newTextField(lO);

button=newButton(〃確定”);

add(text);

add(button);

button.addActionListener(this);

addWindowListener(newWindowAdapter0

{

publicvoidwindowClosing(WindowEvente)

{

System,exit(0);

)

}

);

}

publicvoidactionPerformed(ActionEvente)

(

if(e.getSource()-button)

(

name=text.getText();

button.setLabel(name);

)

)

}

classMyFrameextendsFrame

{

MyPanelpanel1,panel2;

MyFrame()

(

panell=newMyPanel();

pane12=newMyPanel();

add(panel1,BorderLayout.EAST);

add(panel2,BorderLayout.WEST);

setBounds(100,100,400,100);

setVisible(true);

validateO;

)

)

publicclassTest

(

publicstaticvoidmain(Stringargs[])

(

MyFramewin=newMyFrame();

)

}

9.參照例子7.18編寫一個應(yīng)用程序,耍求有一個畫布,在畫布上.繪制一個矩形,用戶通過文本框輸入矩形

的寬和高以及矩形左上角的位置坐標(biāo)。

答:importjava.awt.*;

importjava.awt.event.

classMycanvasextendsCanvas

(

intx,y,w,h;

Mycanvas()

(

setBackground(Color,cyan);

)

publicvoidsetX(intx)

(

this,x=x;

)

publicvoidsetY(inty)

(

this.y=y;

)

publicvoidsetW(intw)

(

this.w=w;

)

publicvoidsetH(inth)

(

this.h=h;

)

publicvoidpaint(Graphicsg)

g.drawRect(x,y,w,h);

)

}

classWindowCanvasextendsFrameimplementsActionListener

Mycanvascanvas;

TextFieldtextl,text2,text3,text4;

Buttonbutton;

WindowCanvas()

{

canvas=newMycanvas();

textl=newTextField(4);

text2=newTextField(4);

text3=newTextField(5);

text4=newTextField⑸;

PanelpNorth=newPanel(),pSouth=newPanel();

button=newButton(“確定");

button.addActionListener(this);

pNorth.add(newLabel("矩形的寬:”));

pNorth.add(text3);

pNorth.add(newLabel("矩形的高:"));

pNorth.add(text4);

pSouth.add(newLabel("左上角位置坐標(biāo):"));

pSouth.add(textl);

pSouth.add(text2);

pSouth.add(button);

addWindowListener(newWindowAdapter()

(

publicvoidwindowClosing(WindowEvente)

(

System,exit(0);

)

)

);

add(canvas,BorderLayout.CENTER);

add(pNorth,BorderLayout.NORTH);

add(pSouth,BorderLayout.SOUTH);

setBounds(100,100,500,500);

setVisible(true);

validate();

)

publicvoidactionPerformed(ActionEvente)

intx,y,w,h;

try

x=Integer.parselnt(textl.getText0);

y二Integer,parselnt(text2.getText());

w二Integer,parselnt(text3.getText());

h=Integer.parselnt(text4.getText());

canvas.setX(x);

canvas.setY(y);

canvas.setW(w);

canvas.setH(h);

canvas,repaint();

)

catch(NuniberFormatExceptionee)

{

x=0;y=0;w=0;h=0;

)

}

)

publicclassTest

(

publicstaticvoidmain(Stringargs[])

(

newWindowCanvas();

)

)

10.編寫應(yīng)用程序,有?個窗口對象,該窗口取它的默認(rèn)布局:80期6村總丫0111布局,北面添加個1/$1;組件,

該組件有四個商品名稱的選項。中心添加一個文本區(qū),當(dāng)選擇List組件中的某個選項后,文本區(qū)顯示對該

商品的價格和產(chǎn)地:當(dāng)雙擊List組件中的某個選項后,文本區(qū)顯示該商品的詳細(xì)廣告。

答:importjava.awt.*:

importjava.awt.event.*;

classWindowGoodsextendsFrameimplementsActionListener,ItemListener

{

Strings[]={〃產(chǎn)地:北京一產(chǎn)地:上海一產(chǎn)地:沈陽一產(chǎn)地:廣東"};

Stringp□:{〃價格:3200〃,〃價格:158〃,〃價格:13.價格:320/打〃};

Stringa□={”本商品****”,"本商品*****","本商品******","本商品*******"};

Listlist;

TextAreatext;

WindowGoods()

list=newList(3,false);

text=newTextArea(6,20);

text.setEditable(false);

list,add("商品1");

list.add("商品2”);

list,add("商品3”);

list.add(“商品4”);

add(list,BorderLayout.NORTH);

add(text,BorderLayout.CENTER);

li

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論