Java趣味編程100例_第1頁
Java趣味編程100例_第2頁
Java趣味編程100例_第3頁
Java趣味編程100例_第4頁
Java趣味編程100例_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、24/22第1章變幻多姿的圖表圖表簡潔直觀,在各種場合得到廣泛應(yīng)用,給人以很強(qiáng)的視覺沖擊,經(jīng)常讓人難以 忘懷。我們的程序中如果能夠靈活地應(yīng)用圖表,一泄能給我們的程序增色不少。本章將帶 你進(jìn)入變換多姿的圖表世界,體會圖表編程帶來的樂趣。1.1金字塔圖案1. 問題描述打印岀金字塔圖案,如圖1所示。2 問題分析這個(gè)問題是一個(gè)很經(jīng)典的循環(huán)應(yīng)用的題目。我們都知道,打印輸出的時(shí)候.都是從 最左端輸出,而這里,第一個(gè)星號是在中間。這實(shí)際是因?yàn)樾翘栔坝泻芏嗫崭瘛.?dāng)我們 使用問號來表示空格,實(shí)際的輸出效果應(yīng)該是圖12的形式。? ? ? ? ? ? ?廿? ? ?* 圖1.1金字塔1.2金字塔的分析圖從圖1.2

2、分析,我們就可以發(fā)現(xiàn)這個(gè)題目的奧秘了。(1)確定程序框架從圖1.2中,我們可以發(fā)現(xiàn),一共需要打印5行,而每一行都是打印幾個(gè)空格,然后 再打印幾個(gè)星號。這樣我們就可以寫岀程序框架了。程序框架代碼如下:public class Chl_l _publie staric void main(String args)for(1=1;i=5;i+十)/打印若干個(gè)空格/循環(huán)5次,打印5行 /打印若T個(gè)星號由于我們這里明確知道打印的行數(shù),所以我們使用for循環(huán)來實(shí)現(xiàn)。下而我們就需要 考慮如何打印每行的星號。(2) 尋找空格和星號的規(guī)律從圖1.2中,我們可以發(fā)現(xiàn):第1行的空格為4個(gè),第2行是3個(gè),第3行是2

3、個(gè),每行依次遞減,直至最后一行空格數(shù)為0:而星號數(shù)目是第1行是1個(gè),第2 行是3,第3行是5,,每行依次遞增2,直至最后一行星號數(shù)為9??偨Y(jié)數(shù)據(jù),我們 可以得到表1所示的規(guī)律。表11空格和星號的規(guī)律行數(shù)空格數(shù)星號數(shù)145-111*2-135-232*2-1325-353*2-1415-4742-15()5-595*2-1規(guī)律依次遞減15-行數(shù)依次遞增2行數(shù)哀2-1從表1中,我們不難發(fā)現(xiàn)行數(shù)和空格數(shù)、星號數(shù)之間有一種很有趣的聯(lián)系。根據(jù)這 個(gè)聯(lián)系,我們就可以考慮完善我們上而的程序了。(3) 打印空格數(shù)由于每行空格數(shù)有著“5-行數(shù)”的規(guī)律。所以在第i行的時(shí)候,空格數(shù)就為5-io所 以我們只要把5-i

4、個(gè)空格打印出來即可。對應(yīng)代碼如下:for(i=l;i=n;i+)for (j=l; j=n-i; j+)/根據(jù)外層行號,輸出星號左邊空格System out print ( H);)雖然每行的空格數(shù)不同,但是對于特左的行,英空格數(shù)是固泄的,所以循環(huán)打印的 次數(shù)是確能的。所以這里同樣適用了 for循環(huán)。(4) 打印星號數(shù)由于每行星號數(shù)有著“行數(shù)*2-1”的規(guī)律。所以在第i行的時(shí)候,星號數(shù)就為2*i- 仁所以我們只要把2*i-l個(gè)星號打印出來即可。對應(yīng)代碼如下:for(i=l;i=5;i+)for(k=l;k=2*i-l;k+)/根據(jù)外層行號,輸出星號個(gè)數(shù)System out printf ();

5、(5) 完整程序現(xiàn)在我們就需要把剛才的程序進(jìn)行組合,構(gòu)成我們的完整程序。import java.utilScanner;public class Chl_l publie static void main(String args)intScanner input=new Scanner(SystemSystem, out .print (請輸入金字塔層數(shù):”); n=input nextlnt();/外層循環(huán)控制層數(shù)for (i=l; i=n;根據(jù)外層行號,輸岀星號左邊空格 for (j=l;j=n-i;j+)System out print(n n);/根據(jù)外層行號.輸出星號個(gè)數(shù)for(k=

6、l;k=2*i-l;k+)System ou匸printf();/一行結(jié)束.換行System out printf(nn);(6)擴(kuò)展訓(xùn)練為了方便大家訓(xùn)練,我們提供幾個(gè)金字塔圖案的同胞兄弟一一倒金字塔、直角三角 形,如圖13所示。大家可以嘗試和它們過過招。 圖1.3各種形狀圖案1.2九九乘法表1.問題描述輸岀九九乘法口訣表,如圖14所示。1*1=12*1-2 2*213叮=3 32=6 3*3=94*1=44*2=34*3=124*4=1651=55*2=105*3=155Y=205*5=25U66*2=126*3=136*4=2465=307*1=773=217弋=2375=357*6=27

7、7=498*1=38*2=16S*3=24護(hù)=323*5=403*6=483*7=568*8=641-99*2-129*3-27一369-6-5-537-639弋十2圖1.4九九乘法口訣表2 問題分析觀察九九乘法口訣表,可以得出圖表的規(guī)律:總共有9行,第幾行就有幾個(gè)表達(dá)式。 同時(shí)要注意每行表達(dá)式的規(guī)律:第j行,表達(dá)式就從j*l開始,一直到j(luò)*j結(jié)朿,共有j個(gè) 表達(dá)式,這個(gè)效果可以通過一次循環(huán)實(shí)現(xiàn)。這樣的話,正好可以通過雙重循環(huán)來控制輸 出,外層循環(huán)控制行數(shù),內(nèi)層循環(huán)控制列。還有個(gè)地方需要注意的是,內(nèi)層和外層之間的 聯(lián)系,內(nèi)層列的個(gè)數(shù)是根據(jù)外層的行數(shù)來控制的。(1) 確定程序框架從圖1.4中,我

8、們可以發(fā)現(xiàn),一共需要打印9行,每行又有若干個(gè)表達(dá)式,可以通過 雙重循環(huán)來實(shí)現(xiàn),外層循環(huán)控制行數(shù),內(nèi)層循環(huán)控制列,這樣我們就可以寫岀程序框架 了。程序框架代碼如下:public class Chl_2 一public static void main(String args) /外循環(huán)控制行數(shù)for (int i=l;i10;i+十)/內(nèi)循環(huán)控制每行表達(dá)式個(gè)數(shù) for (int j=l; j=n; j) /輸出表達(dá)式/一行結(jié)束換行Systemoutprintin();(2) 尋找每行表達(dá)式個(gè)數(shù)規(guī)律從圖1.4中,我們可以發(fā)現(xiàn),第1行一個(gè)表達(dá)式,第2行兩個(gè)表達(dá)式,第3行三個(gè)表 達(dá)式,第幾行就有幾個(gè)表

9、達(dá)式,所以內(nèi)循環(huán)控制列的個(gè)數(shù)的變量n等于控制外循環(huán) 個(gè)數(shù)的變量i,所以內(nèi)循環(huán)代碼就可以寫成如下形式:for(int j=l; j=i; j+)/內(nèi)循環(huán)控制每行表達(dá)式個(gè)數(shù),i代表行數(shù)(3) 表達(dá)式寫法表達(dá)式的寫法都是一致:乘數(shù)1*乘數(shù)2二積。從圖1.4中,我們可以發(fā)現(xiàn)每行表達(dá)式 的規(guī)律:第i行,表達(dá)式就從存1開始,一直到說結(jié)束。乘數(shù)1不變,一直是i,英實(shí)就是行數(shù),乘數(shù)2從1變化到j(luò),正好與內(nèi)循環(huán)變量變化一樣,所以乘數(shù)2就可以用j表 示。所以表達(dá)式的寫法如下:二+ 屯代表行 3 代表列(4) 完整程序現(xiàn)在我們就需要把剛才的程序進(jìn)行組合,構(gòu)成我們的完整程序:public class Chl_2 _p

10、ublic static void main(String args)/外循環(huán)控制行數(shù)for (int i=l;i10;i+)/內(nèi)循環(huán)控制每行表達(dá)式個(gè)數(shù)for (int j=l; j=i; j +)System .out print (+=+ (i*j);/一行結(jié)束換行Systemoutprintin();(5) 運(yùn)行結(jié)果運(yùn)行程序,結(jié)果如圖15所示。圖1.5程序輸出結(jié)果1.3余弦曲線1.問題描述在屏幕上畫出余弦函數(shù)cos(x)曲線,如圖16所示。2 問題分析連續(xù)的曲線是由點(diǎn)組成的,點(diǎn)與點(diǎn)之間距離比較近,看上去就是曲線了,畫圖的關(guān) 鍵是畫出每個(gè)點(diǎn)。Java提供了三角函數(shù)方法,直接調(diào)用cos()方

11、法就可以根拯x坐標(biāo)計(jì)算 出y坐標(biāo)。需要注意的是,cos()方法輸入的參數(shù)是弧度值,要進(jìn)行坐標(biāo)轉(zhuǎn)換,同樣,得到 的結(jié)果也要進(jìn)行轉(zhuǎn)換處理。從圖1.6中可以看岀,這條余弦曲線有兩個(gè)周期,我們可以把 x坐標(biāo)控制在0720。(1) 確定程序框架從圖16中,我們可以發(fā)現(xiàn),整個(gè)圖形包括x軸、y軸及余弦曲線??刂婆_不方便輸 岀圖形,這里以Applet形式輸出。這樣我們就可以寫出程序框架了,代碼如下:int x,y;publie void start () 用public class Chl_3 extends Applet/、”_個(gè)Applet被系統(tǒng)調(diào)用時(shí),系統(tǒng)會自動調(diào)start ()方法Graphics g

12、=getGraphics () ;/畫畫之前.必須先取得畫筆/ffli x 軸/畫y軸/ffli cos (x)曲線(2) 畫x軸為了畫岀圖1.6所示效果,我們可以把坐標(biāo)原點(diǎn)設(shè)左為(360,200) , x軸就是從左到 右的很多點(diǎn)組成,通過循環(huán)語句很容易實(shí)現(xiàn),代碼如下:for(x=0;x=750;x+=l) /gdrawstring(H xz200);/ix 軸細(xì)心的讀者會發(fā)現(xiàn),X軸上還有個(gè)箭頭,這個(gè)是如何實(shí)現(xiàn)的呢,其實(shí)很簡單,是由兩 條線段交匯而成。為方便起見,兩條線段都與x軸成45。角,很容易得到表達(dá)式的方程: y=x-550, y=950-xo 代碼如下:for(x=740;x=750;

13、x+=l)gdrawstring(n ,xx-550); gdrawstring (n 950-x);/x軸上方斜線 /x軸下方斜線(3) 畫y軸參考上而X軸的繪制,很容易畫岀y軸,代碼如下:/y軸for(y=0;x=385;y+=l)gd rawstring (H 360zy) ;/畫 y 軸/y軸箭頭for(x=360;x=370;x+=l)gdrawString(H f x-10f 375-x); gdrawstring (H n tx-355);(4) 畫cox(x)曲線圖形的主體是COX(X)曲線,從圖1.6中可以看出,這條余弦曲線有兩個(gè)周期,我們可 以把X坐標(biāo)控制在0720。cox

14、(x)返回的結(jié)果小于1,為了看到圖1.6效果,必須進(jìn)行放 大處理,這里放大了 80倍,同時(shí)把圖形向下平移了 200個(gè)像素。代碼如下:/兩個(gè)周期,即4JIfor(x=0;x=720;x+=l)a=Math cos(x*Math PI/180);y=(int) (200+80*a) ;/放大80倍并向下平移200個(gè)像素gdrawstring(n fxzy);(5) 完整程序現(xiàn)在我們就需要把剛才的程序進(jìn)行組合,構(gòu)成我們的完整程序:import java applet *; import java awt ;public class Chl_3_2 extends Applet 一 一int x, y

15、;publie void start ()/ffiJiiLUj之前.必須先取得畫筆Graphics g=getGraphics ();/畫x軸、y軸for(x=0;x=750;x+=l)gdrawstring( xz200);if(x=385) gdrawstring( ,360r x); gdrawstring(HYn,330.20);/畫y軸箭頭for(x=360;x=370;x+=l)gdrawstring(H f x-10,375-x);gdrawstring(H ,xz x-355);/畫瓦軸箭頭gdrawstring(MXHz 735,230);for (x=740;x=750;x

16、+=l)gdrawstring(H ,x-550);gdrawstring(H rx, 950-x);/畫cox()曲線for(x=0;x=720;x+=l)double a=Math cos(x*Math PI/180+Math PI);y=(int) (200+80*a);/放大 80 倍并向下平移200個(gè)像素gdrawstring(H fxzy);Chl_3.html網(wǎng)頁代碼如下:applet coae=Chl_3 class (6)運(yùn)行結(jié)果把Chl_3.java文件編譯后的Chl_3.class文件放到Chl_3.html網(wǎng)頁同一目錄下,直接 用IE瀏覽器打開Chl_3.html,運(yùn)行

17、程序,結(jié)果如圖1.6所示。3.擴(kuò)展訓(xùn)練前而介紹的余弦曲線的繪制,我們看到的是一個(gè)完整的靜態(tài)圖形,能否動態(tài)地展現(xiàn) 繪制的過程?答案是肯左的,我們可以釆用線程的方式來實(shí)現(xiàn),參考代碼如下:import java applet Applec;import java awt Color;import java awt Graphics;public class donghuacos extends Applet implements Runnable /通過實(shí)現(xiàn)Runnable接口實(shí)現(xiàn)線程操作int x,y;double a;int xpos=0;Thread runner; boolean paint

18、ed=false;public void init ()/Applet 創(chuàng)建即啟動執(zhí)行.坐葆初始化/ TODO Auto-generamethod stubGraphics g=getGraphics () ;/畫畫之前.必須先取得畫筆for(x=0;x=750;x+=l)/畫 x 軸gdrawstring ( xz200);if(x=385) gdrawstring( r 360zx);gdrawstring (,Y, 330. 20);for(x=360;x=370;x+=l)gdrawstring (n x-10r375-x);g drawstring (H ,x,x355);g dra

19、wstring (X1, 735, 230);for(x=740;x=750;x+=l)g drawstring ( r xz x-550);g drawstring ( H, x, 950-x);/ffliy 軸/Mi y軸箭頭public void start ()啟動方法/ TODO Auto-generamethod stub if(runner=null)runner=new Thread(this);Runnablerunner start();publie void stop ()結(jié)束后自啟動方法/ TODO Auto-generated method stub if(runne

20、r!=null)runner=null;public void run()/ TODO Auto-generated method srub while(true)for(xpos=0;xpos900-90;xpos+=3) /Applet創(chuàng)建后自/通過Thread類來啟動/線程啟動/Applet生命周期/結(jié)束線程/線程運(yùn)行方法/循環(huán)設(shè)宜曲線x軸坐標(biāo)邊界/ 調(diào)用repaint();paint ()方法tryThread, sleep (100) ;/線程休息 100 毫秒catch(InterrupteaException e)if(painted)/)painted=false;public

21、 void paint (Graphics g)/畫圖方法for (x=0; x=xpos; x+=l)/循環(huán)畫曲線a=Math cos(x*Math PI/180+Math PI);y=(int) (200+80*a);/放大 80 倍并向下平移 200個(gè)像素g drawstring (n H z x,y);painted=true;1.4奧運(yùn)五環(huán)旗1.問題描述圖1.7奧運(yùn)五環(huán)旗在屏幕上畫岀奧運(yùn)五環(huán)旗,如圖1.7所示。2. 問題分析觀察奧運(yùn)五環(huán)旗的圖案,直觀的感覺,由五個(gè)圓組成,每 個(gè)圓的顏色不一樣,大小一樣,按照一泄的位宜擺放,找到圓 心坐標(biāo)的規(guī)律,就可以通過Graphics類提供的繪制橢

22、圓的方法 drawOval()來實(shí)現(xiàn)畫圓操作。(1) 確左程序框架奧運(yùn)五環(huán)旗由五個(gè)不同顏色的圓組成,我們可以通過循環(huán)依次輸出五個(gè)圓環(huán)??刂?臺不方便輸出圖形,這里以Applet形式輸出。這樣我們就可以寫出程序框架了,代碼如 下:public class Chl_4_3 extends Applet /簡單實(shí)用為主 一 一/paint ()方法是由瀏覽器調(diào)用的。每半Applet需要刷新的時(shí)候都會調(diào)用該方法 public void paint (Graphics g)for(int i=0;i5;i+)/設(shè)邏當(dāng)前圓的顏色/根據(jù)圓心坐標(biāo)iffi出當(dāng)前圓(2) 圓環(huán)的坐標(biāo)分析分析出圓的圓心坐標(biāo)是畫圖的

23、關(guān)鍵,對照圖18標(biāo)示,分析圓的位置規(guī)律。圖1.8奧運(yùn)五環(huán)旗坐標(biāo)分析上而三個(gè)圓的圓心a. b、c的y坐標(biāo)相同,下而兩個(gè)圓的圓心dx e的y坐標(biāo)相同, ab=bc=ad=de,為保證兩個(gè)圓相交,兩個(gè)圓的圓心距離必須小于2r (r代表圓的半徑)。f 為ab的中點(diǎn),adf組成直角三角形,af=ad/2,只要給沱五個(gè)圓的任何一個(gè)圓心坐標(biāo),就可 以推倒出英他幾個(gè)圓的圓心坐標(biāo)。我們這里使用數(shù)組來存放每個(gè)圓環(huán)的顏色、坐標(biāo)。代碼 如下:/clr存儲顏色privateColorclr = Color.blue,Color black,Color redz Color yellow,Color green; /x存

24、儲圓心的x坐標(biāo)private int x=100/136/172/118/154;/y存儲圓心的y坐標(biāo)private int y二60,60z60,92,9丄;/m代表半徑Private r=20;(3) 畫五環(huán)旗根據(jù)上而給岀的圓的圓心坐標(biāo),通過循環(huán)語句控制,依次畫岀每個(gè)圓環(huán)。代碼如 下:for(int i=0;i5;i+)/設(shè)宜顏色g setColor(clr i);/畫圓,第一個(gè)參數(shù)代表惻心乂坐標(biāo).第二個(gè)參數(shù)代表惻心y坐標(biāo)gdrawOval(xiz yid, d);(4) 完整程序現(xiàn)在我們就需要把剛才的程序進(jìn)行組合,構(gòu)成我們的完整程序:import java awt ;import jav

25、a awt event *;import java applet .Applet;import java awt Color;import java awt Font;public class Chl_4 extends Applet _private Color clr = Color blue. Color black, Color red, Color yellow,Color green;/clr存儲顏色private int x=100f 136, 172, 118,154;/x存儲圓心的龍坐標(biāo)private int y=60r 60, 60, 91z 91;/y 存儲圓心的 y坐標(biāo)

26、private int xy=100f60,136,60,172,60f(118,91),154,91;/存儲圓心的坐標(biāo)private int r=20,a=40;public void paint (Graphics g)/畫圖方法Font font = nex Font (楷體, Font. PLAIN, 20);/文字字體.大小g setFont(font);for(int i=0;i5;i+)/循環(huán)5次,畫5個(gè)惻環(huán)g setColor (clr i);g.drawOval (xi, yi), d, d) ;/a代表橢圓外切矩形的長寬,相等代表圓)g setColor(Color blu

27、e);/設(shè)迓顏色g setFont(font);g. drawstring (奧運(yùn)五環(huán)旗”,120z 169);/END PAINT/END CLASS-奧運(yùn)五環(huán)族測試(5)運(yùn)行結(jié)果再編寫一個(gè)測試Chl_4.html文件,內(nèi) 容參考前而的代碼,把Chl_4.java文件編 譯后的Chl_4.class文件放到Chl_4.html文件同一目錄下,直接用IE瀏覽器打開Chl_4.html,運(yùn)行程序,結(jié)果如圖1.9所zjs oOCO、kJ3.擴(kuò)展訓(xùn)練圖19程序輸岀結(jié)果圖19所示奧運(yùn)五環(huán)旗沒有圖17看著舒服,線條有點(diǎn)細(xì),如果能加粗就好了,可惜Graphics類創(chuàng)建的畫筆的粗細(xì)是默認(rèn)的, 我們不能改變它

28、。有人提出一個(gè)圓環(huán)可以由兩個(gè)圓重疊而成,通過在一個(gè)圓的內(nèi)部緊貼一個(gè)稍小的圓即可達(dá)到加粗線條的目的,這個(gè)思路是可以的,感覺比較麻煩喲,感興趣可以試一下,有沒有簡單點(diǎn)的辦法?答案是肯泄的。我們可以通過Graphics2D類來實(shí)現(xiàn), Graphics2D類擴(kuò)展Graphics類,以提供對幾何形狀、坐標(biāo)轉(zhuǎn)換、顏色管理和文本布局更 為復(fù)雜的控制。參考代碼如下:public void paint(Graphics g)Font font = new Font (M楷體, Font. PLAIN, 20) ;/文字字體、大小BasicStroke a=new BasicStroke (3 . Of) ;/粗

29、細(xì)設(shè)迓對彖(Graphics2D) g) setStroke (a) ;/設(shè)置粗細(xì)for (int i=0;i5;i+)/ 循環(huán) 5次,畫5個(gè)圓環(huán)(Graphics2D) g) . setColor (clr i) ;/設(shè)宜闘環(huán)的顏色(Graphics2D)g)drawOval(xi, yi, df d);g setColor (Color blue) ;/ 設(shè)迓文字顏色g setFont(font);g. drawstring (H奧運(yùn)五環(huán)旗”,120, 169);/END PAINT1.5楊輝三角1.問題描述根據(jù)輸入行數(shù),打印岀楊輝三角形,如圖1.10所示。2 問題分析觀察楊輝三角形的圖案

30、,可以發(fā)現(xiàn)其中的規(guī)律:三角形的豎邊和斜邊都是三 角形里而的任意一個(gè)數(shù)字正好等于它正上方的數(shù)字和左上角的數(shù)字兩個(gè)數(shù)字之和。第幾行 就有幾個(gè)數(shù)字,可以把它補(bǔ)充成如圖111所示效果。111Z11331464巧5101051161520156 1圖1.10楊輝三角形卩000000110000012100001331000146410015101051011615201561圖1.11方方陣(行列相等的矩陣)大家都很熟悉了,可以通過二維數(shù)組來處理方陣,一個(gè)雙 重循環(huán)就能實(shí)現(xiàn),外循環(huán)控制行數(shù),內(nèi)循環(huán)控制列來完成方陣內(nèi)數(shù)字的計(jì)算和存儲。(1) 確定程序框架由前而的問題分析可知,先從鍵盤接收楊輝三角的高度,然

31、后通過二維數(shù)組計(jì)算存 儲楊輝三角,最后把楊輝三角打印出來。程序框架代碼如下:public class Ch1_5 _publie static void main(String args)System, out.print (請輸入行數(shù):H);Scanner scanner = new Scanner(Systemin);int num = scanner .nextlnt () ;/鍵盤接收行數(shù)int ary = getTriangle (num) ; /得到楊輝三角print (ary) ;/打印楊輝三角)(2) 得到楊輝三角由前而的問題分析可知,用二維數(shù)組計(jì)算存儲楊輝三角,楊輝三角豎邊、

32、斜邊都為1,可以先賦值,然后再給中間元素賦值,當(dāng)前位程的值等于它的上方數(shù)和左上角上的數(shù) 之和。程序代碼如下:private static intJ i J getTriang.e(int num)int ary = new intnumnum;/用二維數(shù)組存儲for (int i = 0; i ary.length; i+十) /豎邊.斜邊豐1aryi0 = 1; aryii = 1;for (int i = 1; i ary.length; i+十) /外循環(huán)控制行數(shù)for (int j = 1; j = i; j+)/內(nèi)循環(huán)控制列/里面部分,等于弘前位程的上方和左上角之和 aryi j =

33、 aryi-l) j-l + aryi-l j);return ary;(3) 打印楊輝三角楊輝三角保存在二維數(shù)組中,通過一個(gè)雙重循環(huán)就可以打印岀來,但是要注意的 是,不需要把所有元素都打印出來,內(nèi)循環(huán)列的控制要小于等于當(dāng)前行數(shù)。程序代碼如 下:private static void print (mt J J ary)for (int 1=0;iarylength;i十+)for(int j=0;j=i;j+)System out printf %-3d.Systemoutprintin);/外循環(huán)控制行/內(nèi)循環(huán)控制列aryi(j);/換行(4)完整程序現(xiàn)在我們就需要把剛才的程序進(jìn)行組合,構(gòu)

34、成我們的完整程序:import java ut丄. Scanner;public class Chl_5public static void main(String args)System, out.print (請輸入行數(shù):;Scanner scanner = new Scanner(Systemin);int num = scanner nextTnt();/從鍵盤接收行數(shù)int ary = getTriangle(num); print(ary);/打印楊輝V角/得到楊輝三角/得到楊輝角private static int) getTriangle(int num) int ary =

35、new intnumnum;/用二維數(shù)組存儲for (int i = 0; i arylength; i+十) aryi0 = 1;aryii = 1;/豎邊.斜邊宜1for (int i = 1; i ary.length; i十十) for (int j=l;j=i; j+) 內(nèi)循環(huán)控制列/外循環(huán)控制行/里面部分.等于X前位置的上方和左上角之和 aryi j = aryi-l j-1 + aryi-l j;return ary;private static void print(int ary) for (int i=0;iarylength;i十+)/外循環(huán)控制行for (int j=0

36、;j=i;j+十)/內(nèi)循環(huán)控制列1Sysce m.out. printf (* %-3a f ary i j ); 輸出換行)jSystemoutprintin();/(5)運(yùn)行結(jié)果運(yùn)行程序,結(jié)果如圖112所示。cnsolj TrobleffisLogat Chl_5 Java Application C:Trogran FilesXja圖12程序輸出結(jié)果3. 擴(kuò)展訓(xùn)練圖1.12輸岀的楊輝三角是直角三角形,能不能輸出等戯三角形呢?答案是肯左的。 等腰三角形類似于前而的金字塔圖案,參考前而介紹的思路,不難輸岀等腰三角形。(1) 參考代碼import java.util *;public clas

37、s Chl_5_2 /public static void main(String, args)iScanner in = new Scanner(Systemin);/獲取控制臺輸入對Systemou匸.print (”請輸入行號:*);int m = in.nextlnt();/從鍵盤接收輸入int n=2*m-l;/列元素個(gè)數(shù)int arr=new intmn;for (int i=0; Km;/外循環(huán)控制行/內(nèi)循環(huán)控制列ifI I(j=(m+i)/輸出等腰三角形兩邊空格elseSystem out print (HH);if(j=(m-i-1) I I(j=(m+i-l)/計(jì)算并輸出等

38、腰三角形兩個(gè)腰arrij=l;System ouc printf(%-3d,arr1 j); else/中間默認(rèn)數(shù)字0用空格替換else/il算并輸出中間數(shù)字System out print(H);for (mt j=0; jn; 3 +)arri j=arri-l j-1*arr i-1 j+1); System out printf(H%-3dH,arri j);/輸出換行Systemoutprintin();(2)運(yùn)行結(jié)果運(yùn)行程序,結(jié)果如圖1.13所示。LogCa tApplica tion 1Z : VProgram FilesJavam112131641105120156 13521

39、71310 Chl 5 2 Java圖1.13程序輸出結(jié)果1.6國際象棋棋盤1.問題描述打印出國際象棋棋盤,如圖1.14所示。2.問題分析觀察國際象棋棋盤的圖案,可以發(fā)現(xiàn)其中的規(guī)律:棋盤 由八行八列黑白方塊相間組成,可以用i控制行,j來控制 列,根據(jù)i+j的和的變化來控制輸出黑方塊還是白方塊。這里 我們使用了 Swing的標(biāo)簽組件JLable,通過設(shè)置JLabel組件 的背景色和透明度來實(shí)現(xiàn)黑白方塊。(1)確定程序框架這是一個(gè)繪圖案例,這里我們采用JFramc創(chuàng)建窗口,然 后在窗口里添加JLabel標(biāo)簽組件,通過前面的問題分析可 知,JLabel標(biāo)簽要設(shè)置一些屬性實(shí)現(xiàn)黑白方塊,然后顯示窗口,實(shí)

40、現(xiàn)如圖1.14所示的效 果。程序框架代碼如下:public class Chl_6public static void main(String args)JFrame f=new JFrame (H國際象棋棋盤 /窗口屈性設(shè)宜JLa1 = new JLabel(); /標(biāo)簽屈性設(shè)置f add(1);f setVisible(true);)/生成標(biāo)簽實(shí)例/添加標(biāo)簽/顯示窗口(2)窗口屬性設(shè)置窗口屬性設(shè)苣包括窗口大小、位置等設(shè)置,其中窗口大小要滿足能夠容納黑白方 格,這里指泄黑白方格大小為:20*20.那么窗口屬性大小大概為:168*195。窗口位置 可以隨便指定,這里指定為:(350.200)。

41、程序代碼如下:/窗口設(shè)宜大小f setSize(168,195);/邊框的長和寬/窗口設(shè)豐位置Point point=new Point (350r 200);f setLocation(point);ublic class Chl_6(3)標(biāo)簽屬性設(shè)置標(biāo)簽的屬性主要是標(biāo)簽的位宜及背景色,棋盤是由八行八列黑白方塊相間組成,可以通過雙重循環(huán)來實(shí)現(xiàn),用i控制行.j來控制列,位置很容易設(shè)置,根據(jù)i+j的和的變化 來設(shè)置背景色,表示黑方塊還是白方塊。程序代碼如下:int grids=8;/行數(shù)和列數(shù)int gridsize=20;/収元格的尚和寬for (int i=0; Kgrids; i+)Ifo

42、r (int j = 0; jgrias; j+) (JLabel 1 = nex JLabel ();/生成標(biāo)簽實(shí)例1 setSize(gridsize,gridsize);/設(shè)宜標(biāo)簽大小1 setLocation (i*gridsizez j *gridsize);/設(shè)宜標(biāo)簽位宜if(i+j)%2=0)/當(dāng)小方格的坐標(biāo)和剛好是偶數(shù)時(shí),1setBackground(Color.black);/設(shè)宜方格為黑色1 setOpaque(true);/設(shè)宜為不透明/ else/1setBackground(Color whit亡);/設(shè)魚方格為白色1 setOpaque(true);/設(shè)宜為不透明/1 setBorder(BorderFactory czeateLinEBordez(Color black);/設(shè)宜邊界為黑色)(4) 完整程序現(xiàn)在我們就需要把剛才的程序進(jìn)行組合,構(gòu)成我們的完整程序:import java awt Color;import java awt Point;import

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論