版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 勞動者安全生產(chǎn)協(xié)議書七篇
- 麻痹性腸梗阻病因介紹
- 非火器性顱腦開放傷病因介紹
- 陰虱病病因介紹
- 內(nèi)蒙古通遼市(2024年-2025年小學(xué)六年級語文)部編版隨堂測試(上學(xué)期)試卷及答案
- 中考?xì)v史復(fù)習(xí)方案專題突破知識專題六大國史
- (參考模板范文)申請報告
- 園藝植物種子生產(chǎn)教學(xué)課件
- 企業(yè)內(nèi)部凝聚力培訓(xùn)課件
- 保健按摩師中級練習(xí)題庫及答案
- 期末測試-2024-2025學(xué)年語文六年級上冊統(tǒng)編版
- 綠化遷移專項施工方案
- 山東省2024年冬季普通高中學(xué)業(yè)水平合格考試語文仿真模擬卷01(考試版)
- 全國第二屆職業(yè)技能大賽電子技術(shù)項目江蘇省選拔賽技術(shù)工作文件
- JJF 2165-2024實(shí)驗(yàn)室振動式液體密度儀校準(zhǔn)規(guī)范
- 班組長心理培訓(xùn)課件
- 課桌舞課件教學(xué)課件
- GB/T 44685-2024印刷機(jī)械油墨干燥及固化裝置能效評價方法
- 2024年廣東省公務(wù)員錄用考試《行測》試題及答案解析
- 產(chǎn)品質(zhì)量檢測服務(wù)行業(yè)營銷策略方案
- 區(qū)塊鏈技術(shù)與應(yīng)用學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
評論
0/150
提交評論