




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、精選文檔第1章 變幻多姿的圖表1.1 金字塔圖案1問(wèn)題描述打印出金字塔圖案,如圖1.1所示。2問(wèn)題分析這個(gè)問(wèn)題是一個(gè)很經(jīng)典的循環(huán)應(yīng)用的題目。我們都知道,打印輸出的時(shí)候,都是從最左端輸出,而這里,第一個(gè)星號(hào)是在中間。這實(shí)際是由于星號(hào)之前有很多空格。當(dāng)我們使用問(wèn)號(hào)來(lái)表示空格,實(shí)際的輸出效果應(yīng)當(dāng)是圖1.2的形式。 圖1.1 金字塔圖1.2 金字塔的分析圖從圖1.2分析,我們就可以發(fā)覺(jué)這個(gè)題目的奇特了。(1)確定程序框架從圖1.2中,我們可以發(fā)覺(jué),一共需要打印5行,而每一行都是打印幾個(gè)空格,然后再打印幾個(gè)星號(hào)。這樣我們就可以寫出程序框架了。程序框架代碼如下:public class Ch1_1 pub
2、lic static void main(String args) * for(i=1;i<=5;i+)/循環(huán)5次,打印5行 /打印若干個(gè)空格 /打印若干個(gè)星號(hào) 由于我們這里明確知道打印的行數(shù),所以我們使用for循環(huán)來(lái)實(shí)現(xiàn)。下面我們就需要考慮如何打印每行的星號(hào)。(2)查找空格和星號(hào)的規(guī)律從圖1.2中,我們可以發(fā)覺(jué):第1行的空格為4個(gè),第2行是3個(gè),第3行是2個(gè),每行依次遞減,直至最終一行空格數(shù)為0;而星號(hào)數(shù)目是第1行是1個(gè),第2行是3,第3行是5,每行依次遞增2,直至最終一行星號(hào)數(shù)為9??偨Y(jié)數(shù)據(jù),我們可以得到表1.1所示的規(guī)律。表1.1 空格和星號(hào)的規(guī)律行數(shù)空格數(shù)星號(hào)數(shù)145111*21
3、235232*21325353*21415474*21505595*21規(guī)律依次遞減15行數(shù)依次遞增2行數(shù)*21從表1.1中,我們不難發(fā)覺(jué)行數(shù)和空格數(shù)、星號(hào)數(shù)之間有一種很好玩的聯(lián)系。依據(jù)這個(gè)聯(lián)系,我們就可以考慮完善我們上面的程序了。(3)打印空格數(shù)由于每行空格數(shù)有著“5行數(shù)”的規(guī)律。所以在第i行的時(shí)候,空格數(shù)就為5i。所以我們只要把5i個(gè)空格打印出來(lái)即可。對(duì)應(yīng)代碼如下:for(i=1;i<=n;i+)for(j=1;j<=n-i;j+)/依據(jù)外層行號(hào),輸出星號(hào)左邊空格System.out.print(" ");雖然每行的空格數(shù)不同,但是對(duì)于特定的行,其空格數(shù)是固
4、定的,所以循環(huán)打印的次數(shù)是確定的。所以這里同樣適用了for循環(huán)。(4)打印星號(hào)數(shù)由于每行星號(hào)數(shù)有著“行數(shù)*21”的規(guī)律。所以在第i行的時(shí)候,星號(hào)數(shù)就為2*i1。所以我們只要把2*i1個(gè)星號(hào)打印出來(lái)即可。對(duì)應(yīng)代碼如下:for(i=1;i<=5;i+)for(k=1;k<=2*i-1;k+)/依據(jù)外層行號(hào),輸出星號(hào)個(gè)數(shù)System.out.printf("*");(5)完整程序現(xiàn)在我們就需要把剛才的程序進(jìn)行組合,構(gòu)成我們的完整程序。import java.util.Scanner;public class Ch1_1 public static void main(
5、String args) int i,j,k,n;Scanner input=new Scanner(System.in);System.out.print("請(qǐng)輸入金字塔層數(shù):");n=input.nextInt(); /外層循環(huán)把握層數(shù)for(i=1;i<=n;i+) /依據(jù)外層行號(hào),輸出星號(hào)左邊空格for(j=1;j<=n-i;j+)System.out.print(" "); /依據(jù)外層行號(hào),輸出星號(hào)個(gè)數(shù)for(k=1;k<=2*i-1;k+)System.out.printf("*"); /一行結(jié)束,換行S
6、ystem.out.printf("n");(6)擴(kuò)展訓(xùn)練為了便利大家訓(xùn)練,我們供應(yīng)幾個(gè)金字塔圖案的同胞兄弟倒金字塔、直角三角形,如圖1.3所示。大家可以嘗試和它們過(guò)過(guò)招。圖1.3 各種外形圖案1.2 九九乘法表1問(wèn)題描述輸出九九乘法口訣表,如圖1.4所示。圖1.4 九九乘法口訣表2問(wèn)題分析觀看九九乘法口訣表,可以得出圖表的規(guī)律:總共有9行,第幾行就有幾個(gè)表達(dá)式。同時(shí)要留意每行表達(dá)式的規(guī)律:第j行,表達(dá)式就從j*1開頭,始終到j(luò)*j結(jié)束,共有j個(gè)表達(dá)式,這個(gè)效果可以通過(guò)一次循環(huán)實(shí)現(xiàn)。這樣的話,正好可以通過(guò)雙重循環(huán)來(lái)把握輸出,外層循環(huán)把握行數(shù),內(nèi)層循環(huán)把握列。還有個(gè)地方需要留
7、意的是,內(nèi)層和外層之間的聯(lián)系,內(nèi)層列的個(gè)數(shù)是依據(jù)外層的行數(shù)來(lái)把握的。(1)確定程序框架從圖1.4中,我們可以發(fā)覺(jué),一共需要打印9行,每行又有若干個(gè)表達(dá)式,可以通過(guò)雙重循環(huán)來(lái)實(shí)現(xiàn),外層循環(huán)把握行數(shù),內(nèi)層循環(huán)把握列,這樣我們就可以寫出程序框架了。程序框架代碼如下:public class Ch1_2 public static void main(String args) /外循環(huán)把握行數(shù)for(int i=1;i<10;i+) /內(nèi)循環(huán)把握每行表達(dá)式個(gè)數(shù)for(int j=1; j<=n; j+) /輸出表達(dá)式 /一行結(jié)束換行System.out.println(); (2)查找每行
8、表達(dá)式個(gè)數(shù)規(guī)律從圖1.4中,我們可以發(fā)覺(jué),第1行一個(gè)表達(dá)式,第2行兩個(gè)表達(dá)式,第3行三個(gè)表達(dá)式,第幾行就有幾個(gè)表達(dá)式,所以內(nèi)循環(huán)把握列的個(gè)數(shù)的變量n等于把握外循環(huán)個(gè)數(shù)的變量i,所以內(nèi)循環(huán)代碼就可以寫成如下形式:for(int j=1; j<=i; j+) /內(nèi)循環(huán)把握每行表達(dá)式個(gè)數(shù),i代表行數(shù)(3)表達(dá)式寫法表達(dá)式的寫法都是全都:乘數(shù)1*乘數(shù)2=積。從圖1.4中,我們可以發(fā)覺(jué)每行表達(dá)式的規(guī)律:第i行,表達(dá)式就從i*1開頭,始終到i*j結(jié)束。乘數(shù)1不變,始終是i,其實(shí)就是行數(shù),乘數(shù)2從1變化到j(luò),正好與內(nèi)循環(huán)變量變化一樣,所以乘數(shù)2就可以用j表示。所以表達(dá)式的寫法如下:i+"*&
9、quot;+j+"="+i*j /i代表行,j代表列(4)完整程序現(xiàn)在我們就需要把剛才的程序進(jìn)行組合,構(gòu)成我們的完整程序:public class Ch1_2 public static void main(String args) /外循環(huán)把握行數(shù)for(int i=1;i<10;i+) /內(nèi)循環(huán)把握每行表達(dá)式個(gè)數(shù)for(int j=1; j<=i; j+) System.out.print(" "+i+"*"+j+"="+(i*j); /一行結(jié)束換行System.out.println(); (5)
10、運(yùn)行結(jié)果運(yùn)行程序,結(jié)果如圖1.5所示。圖1.5 程序輸出結(jié)果1.3 余 弦 曲 線1問(wèn)題描述在屏幕上畫出余弦函數(shù)cos(x)曲線,如圖1.6所示。圖1.6 余弦函數(shù)cos(x)曲線2問(wèn)題分析連續(xù)的曲線是由點(diǎn)組成的,點(diǎn)與點(diǎn)之間距離比較近,看上去就是曲線了,畫圖的關(guān)鍵是畫出每個(gè)點(diǎn)。Java供應(yīng)了三角函數(shù)方法,直接調(diào)用cos()方法就可以依據(jù)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)確定程序框架從圖1.6中,我們可以發(fā)覺(jué),整個(gè)圖形包括x軸、y
11、軸及余弦曲線。把握臺(tái)不便利輸出圖形,這里以Applet形式輸出。這樣我們就可以寫出程序框架了,代碼如下:public class Ch1_3 extends Applet int x,y;public void start()/當(dāng)一個(gè)Applet被系統(tǒng)調(diào)用時(shí),系統(tǒng)會(huì)自動(dòng)調(diào)用 start()方法Graphics g=getGraphics();/畫畫之前,必需先取得畫筆/畫x軸/畫y軸/畫cos(x)曲線(2)畫x軸為了畫出圖1.6所示效果,我們可以把坐標(biāo)原點(diǎn)設(shè)定為(360,200),x軸就是從左到右的很多點(diǎn)組成,通過(guò)循環(huán)語(yǔ)句很簡(jiǎn)潔實(shí)現(xiàn),代碼如下:for(x=0;x<=750;x+=1)g
12、.drawString("·",x,200);/畫x軸細(xì)心的讀者會(huì)發(fā)覺(jué),x軸上還有個(gè)箭頭,這個(gè)是如何實(shí)現(xiàn)的呢,其實(shí)很簡(jiǎn)潔,是由兩條線段交匯而成。為便利起見(jiàn),兩條線段都與x軸成45°角,很簡(jiǎn)潔得到表達(dá)式的方程:y=x550,y=950x。代碼如下:for(x=740;x<=750;x+=1)g.drawString("·",x,x-550); /x軸上方斜線g.drawString("·",x,950-x); /x軸下方斜線(3)畫y軸參考上面x軸的繪制,很簡(jiǎn)潔畫出y軸,代碼如下:/y軸fo
13、r(y=0;x<=385;y+=1)g.drawString("·",360,y);/畫y軸/y軸箭頭for(x=360;x<=370;x+=1)g.drawString("·",x-10,375-x);g.drawString("·",x,x-355);(4)畫cox(x)曲線圖形的主體是cox(x)曲線,從圖1.6中可以看出,這條余弦曲線有兩個(gè)周期,我們可以把x坐標(biāo)把握在0720。cox(x)返回的結(jié)果小于1,為了看到圖1.6效果,必需進(jìn)行放大處理,這里放大了80倍,同時(shí)把圖形向下平移了2
14、00個(gè)像素。代碼如下:/兩個(gè)周期,即4for(x=0;x<=720;x+=1)a=Math.cos(x*Math. PI/180);y=(int)(200+80*a); /放大80倍并向下平移200個(gè)像素g.drawString("·",x,y);(5)完整程序現(xiàn)在我們就需要把剛才的程序進(jìn)行組合,構(gòu)成我們的完整程序:import java.applet.*;import java.awt.*;public class Ch1_3_2 extends Applet int x,y;public void start() /畫畫之前,必需先取得畫筆Graphic
15、s g=getGraphics(); /畫x軸、y軸for(x=0;x<=750;x+=1)g.drawString("·",x,200);if(x<=385) g.drawString("·",360,x);g.drawString("Y",330,20); /畫y軸箭頭for(x=360;x<=370;x+=1)g.drawString("·",x-10,375-x);g.drawString("·",x,x-355); /畫x軸箭頭
16、g.drawString("X",735,230);for(x=740;x<=750;x+=1)g.drawString("·",x,x-550);g.drawString("·",x,950-x); /畫cox()曲線for(x=0;x<=720;x+=1)double a=Math.cos(x*Math. PI/180+Math.PI);y=(int)(200+80*a);/放大80倍并向下平移200個(gè)像素g.drawString("·",x,y);Ch1_3.html
17、網(wǎng)頁(yè)代碼如下:<html><head><title>余弦曲線測(cè)試</title></head></body> <p><!-調(diào)用Ch1_3字節(jié)碼文件 -><applet code=Ch1_3.class <!-設(shè)置窗口大小 ->width=900height=600></applet></body></html> (6)運(yùn)行結(jié)果把Ch1_3.java文件編譯后的Ch1_3.class文件放到Ch1_3.html網(wǎng)頁(yè)同一名目下,直接用IE掃瞄器
18、打開Ch1_3.html,運(yùn)行程序,結(jié)果如圖1.6所示。3擴(kuò)展訓(xùn)練前面介紹的余弦曲線的繪制,我們看到的是一個(gè)完整的靜態(tài)圖形,能否動(dòng)態(tài)地呈現(xiàn)繪制的過(guò)程?答案是確定的,我們可以接受線程的方式來(lái)實(shí)現(xiàn),參考代碼如下:import java.applet.Applet;import java.awt.Color;import java.awt.Graphics;public class donghua_cos extends Applet implements Runnable/通過(guò)實(shí)現(xiàn)Runnable接口實(shí)現(xiàn)線程操作int x,y;double a;int xpos=0;Thread runner;b
19、oolean painted=false;public void init() /Applet創(chuàng)建即啟動(dòng)執(zhí)行,坐標(biāo)初始化/ TODO Auto-generated method stubGraphics g=getGraphics();/畫畫之前,必需先取得畫筆for(x=0;x<=750;x+=1)/畫x軸 g.drawString("·",x,200); if(x<=385) g.drawString("·",360,x); g.drawString("Y",330,20);/畫y軸for(x=36
20、0;x<=370;x+=1)/畫y軸箭頭 g.drawString("·",x-10,375-x); g.drawString("·",x,x-355);g.drawString("X",735,230);for(x=740;x<=750;x+=1)/畫x軸箭頭 g.drawString("·",x,x-550); g.drawString("·",x,950-x);public void start() /Applet創(chuàng)建后自啟動(dòng)方法/ TO
21、DO Auto-generated method stubif(runner=null)runner=new Thread(this);/通過(guò)Thread類來(lái)啟動(dòng)Runnablerunner.start();/線程啟動(dòng)public void stop() /Applet生命周期結(jié)束后自啟動(dòng)方法/ TODO Auto-generated method stubif(runner!=null)runner=null;/結(jié)束線程public void run() /線程運(yùn)行方法/ TODO Auto-generated method stubwhile(true)for(xpos=0;xpos<
22、;900-90;xpos+=3)/循環(huán)設(shè)置曲線x軸坐標(biāo)邊界repaint();/調(diào)用paint()方法tryThread.sleep(100);/線程休息100毫秒catch(InterruptedException e)if(painted)painted=false;public void paint(Graphics g)/畫圖方法for(x=0;x<=xpos;x+=1)/循環(huán)畫曲線 a=Math.cos(x*Math. PI/180+Math.PI); y=(int)(200+80*a);/放大80倍并向下平移200個(gè)像素 g.drawString("·&q
23、uot;,x,y);painted=true;1.4 奧運(yùn)五環(huán)旗1問(wèn)題描述圖1.7 奧運(yùn)五環(huán)旗在屏幕上畫出奧運(yùn)五環(huán)旗,如圖1.7所示。2問(wèn)題分析觀看奧運(yùn)五環(huán)旗的圖案,直觀的感覺(jué),由五個(gè)圓組成,每個(gè)圓的顏色不一樣,大小一樣,依據(jù)肯定的位置擺放,找到圓心坐標(biāo)的規(guī)律,就可以通過(guò)Graphics類供應(yīng)的繪制橢圓的方法drawOval()來(lái)實(shí)現(xiàn)畫圓操作。(1)確定程序框架奧運(yùn)五環(huán)旗由五個(gè)不同顏色的圓組成,我們可以通過(guò)循環(huán)依次輸出五個(gè)圓環(huán)。把握臺(tái)不便利輸出圖形,這里以Applet形式輸出。這樣我們就可以寫出程序框架了,代碼如下:public class Ch1_4_3 extends Applet /簡(jiǎn)潔
24、有用為主/paint()方法是由掃瞄器調(diào)用的。每當(dāng)Applet需要刷新的時(shí)候都會(huì)調(diào)用該方法public void paint(Graphics g) for(int i=0;i<5;i+) /設(shè)置當(dāng)前圓的顏色/依據(jù)圓心坐標(biāo)畫出當(dāng)前圓 (2)圓環(huán)的坐標(biāo)分析分析出圓的圓心坐標(biāo)是畫圖的關(guān)鍵,對(duì)比圖1.8標(biāo)示,分析圓的位置規(guī)律。O圖1.8 奧運(yùn)五環(huán)旗坐標(biāo)分析上面三個(gè)圓的圓心a、b、c的y坐標(biāo)相同,下面兩個(gè)圓的圓心d、e的y坐標(biāo)相同,ab=bc=ad=de,為保證兩個(gè)圓相交,兩個(gè)圓的圓心距離必需小于2r(r代表圓的半徑)。f為ab的中點(diǎn),adf組成直角三角形,af=ad/2,只要給定五個(gè)圓的任何一
25、個(gè)圓心坐標(biāo),就可以推倒出其他幾個(gè)圓的圓心坐標(biāo)。我們這里使用數(shù)組來(lái)存放每個(gè)圓環(huán)的顏色、坐標(biāo)。代碼如下:/clr存儲(chǔ)顏色private Color clr=Color.blue,Color.black,Color.red,Color.yellow,Color. green;/x存儲(chǔ)圓心的x坐標(biāo)private int x=100,136,172,118,154; /y存儲(chǔ)圓心的y坐標(biāo)private int y=60,60,60,91,91;/r代表半徑Private r=20;(3)畫五環(huán)旗依據(jù)上面給出的圓的圓心坐標(biāo),通過(guò)循環(huán)語(yǔ)句把握,依次畫出每個(gè)圓環(huán)。代碼如下:for(int i=0;i<5
26、;i+)/設(shè)置顏色g.setColor(clri);/畫圓,第一個(gè)參數(shù)代表圓心x坐標(biāo),其次個(gè)參數(shù)代表圓心y坐標(biāo)g.drawOval(xi, yi, d, d);(4)完整程序現(xiàn)在我們就需要把剛才的程序進(jìn)行組合,構(gòu)成我們的完整程序:import java.awt.*;import java.awt.event.*;import java.applet.Applet;import java.awt.Color;import java.awt.Font;public class Ch1_4 extends Applet private Color clr=Color.blue,Color.black
27、,Color.red,Color.yellow,Color.green;/clr存儲(chǔ)顏色private int x=100,136,172,118,154; /x存儲(chǔ)圓心的x坐標(biāo)private int y=60,60,60,91,91;/y存儲(chǔ)圓心的y坐標(biāo)private int xy=100,60,136,60,172,60,118,91,154,91;/存儲(chǔ)圓心的坐標(biāo)private int r=20,d=40;public void paint(Graphics g)/畫圖方法 Font font = new Font("楷體",Font.PLAIN,20);/文字字體、
28、大小g.setFont(font);for(int i=0;i<5;i+)/循環(huán)5次,畫5個(gè)圓環(huán)g.setColor(clri);g.drawOval(xi, yi, d, d);/d代表橢圓外切矩形的長(zhǎng)寬,相等代表圓g.setColor(Color.blue);/設(shè)置顏色g.setFont(font);g.drawString("奧運(yùn)五環(huán)旗",120,169);/END PAINT/END CLASS圖1.9 程序輸出結(jié)果(5)運(yùn)行結(jié)果再編寫一個(gè)測(cè)試Ch1_4.html文件,內(nèi)容參考前面的代碼,把Ch1_4.java文件編譯后的Ch1_4.class文件放到Ch1_
29、4.html文件同一名目下,直接用IE掃瞄器打開Ch1_4.html,運(yùn)行程序,結(jié)果如圖1.9所示。3擴(kuò)展訓(xùn)練圖1.9所示奧運(yùn)五環(huán)旗沒(méi)有圖1.7看著舒適,線條有點(diǎn)細(xì),假如能加粗就好了,惋惜Graphics類創(chuàng)建的畫筆的粗細(xì)是默認(rèn)的,我們不能轉(zhuǎn)變它。有人提出一個(gè)圓環(huán)可以由兩個(gè)圓重疊而成,通過(guò)在一個(gè)圓的內(nèi)部緊貼一個(gè)稍小的圓即可達(dá)到加粗線條的目的,這個(gè)思路是可以的,感覺(jué)比較麻煩喲,感愛(ài)好可以試一下,有沒(méi)有簡(jiǎn)潔點(diǎn)的方法?答案是確定的。我們可以通過(guò)Graphics2D類來(lái)實(shí)現(xiàn),Graphics2D類擴(kuò)展Graphics類,以供應(yīng)對(duì)幾何外形、坐標(biāo)轉(zhuǎn)換、顏色管理和文本布局更為簡(jiǎn)單的把握。參考代碼如下:pub
30、lic void paint(Graphics g) Font font = new Font("楷體",Font.PLAIN,20);/文字字體、大小BasicStroke a=new BasicStroke(3.0f);/粗細(xì)設(shè)置對(duì)象(Graphics2D)g).setStroke(a);/設(shè)置粗細(xì)for(int i=0;i<5;i+)/循環(huán)5次,畫5個(gè)圓環(huán)(Graphics2D)g).setColor(clri);/設(shè)置圓環(huán)的顏色(Graphics2D)g).drawOval(xi, yi, d, d);g.setColor(Color.blue);/設(shè)置文字顏
31、色g.setFont(font);g.drawString("奧運(yùn)五環(huán)旗",120,169);/END PAINT1.5 楊 輝 三 角1問(wèn)題描述依據(jù)輸入行數(shù),打印出楊輝三角形,如圖1.10所示。2問(wèn)題分析觀看楊輝三角形的圖案,可以發(fā)覺(jué)其中的規(guī)律:三角形的豎邊和斜邊都是“1”,三角形里面的任意一個(gè)數(shù)字正好等于它正上方的數(shù)字和左上角的數(shù)字兩個(gè)數(shù)字之和。第幾行就有幾個(gè)數(shù)字,可以把它補(bǔ)充成如圖1.11所示效果。 圖1.10 楊輝三角形 圖1.11 方陣方陣(行列相等的矩陣)大家都很生疏了,可以通過(guò)二維數(shù)組來(lái)處理方陣,一個(gè)雙重循環(huán)就能實(shí)現(xiàn),外循環(huán)把握行數(shù),內(nèi)循環(huán)把握列來(lái)完成方陣內(nèi)數(shù)
32、字的計(jì)算和存儲(chǔ)。(1)確定程序框架由前面的問(wèn)題分析可知,先從鍵盤接收楊輝三角的高度,然后通過(guò)二維數(shù)組計(jì)算存儲(chǔ)楊輝三角,最終把楊輝三角打印出來(lái)。程序框架代碼如下:public class Ch1_5 public static void main(String args) System.out.print("請(qǐng)輸入行數(shù):"); Scanner scanner = new Scanner(System.in); int num = scanner.nextInt();/鍵盤接收行數(shù) int ary = getTriangle(num);/得到楊輝三角 print(ary);/打
33、印楊輝三角(2)得到楊輝三角由前面的問(wèn)題分析可知,用二維數(shù)組計(jì)算存儲(chǔ)楊輝三角,楊輝三角豎邊、斜邊都為1,可以先賦值,然后再給中間元素賦值,當(dāng)前位置的值等于它的上方數(shù)和左上角上的數(shù)之和。程序代碼如下:private static int getTriangle(int num) int ary = new intnumnum;/用二維數(shù)組存儲(chǔ) 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
34、<= i; j+)/內(nèi)循環(huán)把握列/里面部分,等于當(dāng)前位置的上方和左上角之和aryij = aryi-1j-1 + aryi-1j;return ary;(3)打印楊輝三角楊輝三角保存在二維數(shù)組中,通過(guò)一個(gè)雙重循環(huán)就可以打印出來(lái),但是要留意的是,不需要把全部元素都打印出來(lái),內(nèi)循環(huán)列的把握要小于等于當(dāng)前行數(shù)。程序代碼如下:private static void print(int ary)for(int i=0;i<ary.length;i+)/外循環(huán)把握行for(int j=0;j<=i;j+)/內(nèi)循環(huán)把握列System.out.printf(" %-3d"
35、, aryij);System.out.println();/換行(4)完整程序現(xiàn)在我們就需要把剛才的程序進(jìn)行組合,構(gòu)成我們的完整程序:import java.util.Scanner;public class Ch1_5 public static void main(String args) System.out.print("請(qǐng)輸入行數(shù):"); Scanner scanner = new Scanner(System.in); int num = scanner.nextInt();/從鍵盤接收行數(shù) int ary = getTriangle(num);/得到楊輝三角
36、 print(ary);/打印楊輝三角/得到楊輝三角private static int getTriangle(int num) int ary = new intnumnum;/用二維數(shù)組存儲(chǔ) for(int i = 0; i < ary.length; i+)/豎邊、斜邊置1aryi0 = 1;aryii = 1; for(int i = 1; i < ary.length; i+)/外循環(huán)把握行for(int j = 1; j <= i; j+)/內(nèi)循環(huán)把握列/里面部分,等于當(dāng)前位置的上方和左上角之和aryij = aryi-1j-1 + aryi-1j;return
37、 ary;private static void print(int ary)for(int i=0;i<ary.length;i+)/外循環(huán)把握行for(int j=0;j<=i;j+)/內(nèi)循環(huán)把握列System.out.printf(" %-3d", aryij);System.out.println();/輸出換行(5)運(yùn)行結(jié)果運(yùn)行程序,結(jié)果如圖1.12所示。圖1.12 程序輸出結(jié)果3擴(kuò)展訓(xùn)練圖1.12輸出的楊輝三角是直角三角形,能不能輸出等腰三角形呢?答案是確定的。等腰三角形類似于前面的金字塔圖案,參考前面介紹的思路,不難輸出等腰三角形。(1)參考代碼i
38、mport java.util.*;public class Ch1_5_2 public static void main(String args) Scanner in = new Scanner(System.in);/獵取把握臺(tái)輸入對(duì)象 System.out.print("請(qǐng)輸入行號(hào): "); int m = in.nextInt();/從鍵盤接收輸入 int n=2*m-1;/列元素個(gè)數(shù) int arr=new intmn; for(int i=0;i<m;i+)/外循環(huán)把握行 for(int j=0;j<n;j+)/內(nèi)循環(huán)把握列 if(j<(m
39、-i-1)|(j>=(m+i)/輸出等腰三角形兩邊空格 System.out.print(" "); else if(j=(m-i-1)|(j=(m+i-1)/計(jì)算并輸出等腰三角形兩個(gè)腰 arrij=1; System.out.printf("%-3d",arrij); else if(i+j)%2=0&&m%2=0|(i+j)%2=1&&m%2=1)/中間默認(rèn)數(shù)字0用空格替換 System.out.print(" "); else/計(jì)算并輸出中間數(shù)字 arrij=arri-1j-1+arri-1
40、j+1; System.out.printf("%-3d",arrij); System.out.println();/輸出換行 (2)運(yùn)行結(jié)果運(yùn)行程序,結(jié)果如圖1.13所示。圖1.13 程序輸出結(jié)果1.6 國(guó)際象棋棋盤1問(wèn)題描述打印出國(guó)際象棋棋盤,如圖1.14所示。圖1.14 國(guó)際象棋棋盤2問(wèn)題分析觀看國(guó)際象棋棋盤的圖案,可以發(fā)覺(jué)其中的規(guī)律:棋盤由八行八列黑白方塊相間組成,可以用i把握行,j來(lái)把握列,依據(jù)i+j的和的變化來(lái)把握輸出黑方塊還是白方塊。這里我們使用了Swing的標(biāo)簽組件JLable,通過(guò)設(shè)置JLabel組件的背景色和透亮度來(lái)實(shí)現(xiàn)黑白方塊。(1)確定程序框架這是
41、一個(gè)繪圖案例,這里我們接受JFrame創(chuàng)建窗口,然后在窗口里添加JLabel標(biāo)簽組件,通過(guò)前面的問(wèn)題分析可知,JLabel標(biāo)簽要設(shè)置一些屬性實(shí)現(xiàn)黑白方塊,然后顯示窗口,實(shí)現(xiàn)如圖1.14所示的效果。程序框架代碼如下:public class Ch1_6 public static void main(String args) JFrame f=new JFrame("國(guó)際象棋棋盤");/窗口屬性設(shè)置 JLabel l = new JLabel();/生成標(biāo)簽實(shí)例 /標(biāo)簽屬性設(shè)置 f.add(l);/添加標(biāo)簽 f.setVisible(true);/顯示窗口(2)窗口屬性設(shè)置窗
42、口屬性設(shè)置包括窗口大小、位置等設(shè)置,其中窗口大小要滿足能夠容納黑白方格,這里指定黑白方格大小為:20*20,那么窗口屬性大小或許為:168*195。窗口位置可以任憑指定,這里指定為:(350,200)。程序代碼如下:/窗口設(shè)置大小f.setSize(168,195); /邊框的長(zhǎng)和寬 /窗口設(shè)置位置Point point=new Point(350,200);f.setLocation(point);ublic class Ch1_6 (3)標(biāo)簽屬性設(shè)置標(biāo)簽的屬性主要是標(biāo)簽的位置及背景色,棋盤是由八行八列黑白方塊相間組成,可以通過(guò)雙重循環(huán)來(lái)實(shí)現(xiàn),用i把握行,j來(lái)把握列,位置很簡(jiǎn)潔設(shè)置,依據(jù)i+
43、j的和的變化來(lái)設(shè)置背景色,表示黑方塊還是白方塊。程序代碼如下:int grids=8;/行數(shù)和列數(shù)int gridsize=20;/單元格的高和寬 for(int i=0; i<grids; i+)for(int j=0; j<grids; j+)JLabel l = new JLabel();/生成標(biāo)簽實(shí)例l.setSize(gridsize,gridsize);/設(shè)置標(biāo)簽大小l.setLocation(i*gridsize,j*gridsize);/設(shè)置標(biāo)簽位置if(i+j)%2=0) /當(dāng)小方格的坐標(biāo)和剛好是偶數(shù)時(shí),l.setBackground(Color.black);
44、/設(shè)置方格為黑色l.setOpaque(true); /設(shè)置為不透亮 elsel.setBackground(Color.white); /設(shè)置方格為白色l.setOpaque(true); /設(shè)置為不透亮 l.setBorder(BorderFactory.createLineBorder(Color.black); /設(shè)置邊界為黑色(4)完整程序現(xiàn)在我們就需要把剛才的程序進(jìn)行組合,構(gòu)成我們的完整程序:import java.awt.Color;import java.awt.Point;import javax.swing.BorderFactory;import javax.swing.
45、JFrame;import javax.swing.JLabel;public class Ch1_6 public static void main(String args) JFrame f=new JFrame("國(guó)際象棋棋盤");/創(chuàng)建窗口/窗口設(shè)置大小f.setSize(168,195); /邊框的長(zhǎng)和寬 /窗口設(shè)置位置 Point point=new Point(350,200); f.setLocation(point); int grids=8;/行數(shù)和列數(shù)int gridsize=20;/單元格的高和寬 for(int i=0; i<grids; i+)/外循環(huán)把握行 for(int j=0; j<grids; j+)/內(nèi)循環(huán)把握列 JLabel l = new J
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 私人貸款合同樣本
- 2025年卸氣柱項(xiàng)目發(fā)展計(jì)劃
- 飲料加盟合同范本
- 5 走近我們的老師 第一課時(shí) 教學(xué)設(shè)計(jì)-2023-2024學(xué)年道德與法治三年級(jí)上冊(cè)統(tǒng)編版
- 買房時(shí)的合同范本
- 門店拆除工程合同范本
- 8 蝴蝶的家(教學(xué)設(shè)計(jì))-2024-2025學(xué)年統(tǒng)編版語(yǔ)文四年級(jí)上冊(cè)
- 美的購(gòu)銷安裝合同范本
- 4 日月山川(教學(xué)設(shè)計(jì))-2024-2025學(xué)年統(tǒng)編版語(yǔ)文一年級(jí)上冊(cè)
- 私人包車帶司機(jī)協(xié)議
- 國(guó)家智慧教育平臺(tái)應(yīng)用培訓(xùn)
- 呼吸系統(tǒng)疾病病人的麻醉-2
- 內(nèi)蒙古醫(yī)科大學(xué)同等學(xué)力英語(yǔ)真題
- 專題18 化學(xué)工藝流程綜合題-分離、提純類-五年(2020-2024)高考化學(xué)真題分類匯編(解析版)
- 汽車美容裝潢技術(shù)電子教案 6.3-汽車娛樂(lè)類電子產(chǎn)品裝飾
- 防性侵安全教育課件
- 2024年注冊(cè)計(jì)量師-一級(jí)注冊(cè)計(jì)量師考試近5年真題集錦(頻考類試題)帶答案
- 《籃球:行進(jìn)間單手肩上投籃》教案(四篇)
- 醫(yī)學(xué)教案阿爾茨海默病及其他類型癡呆臨床路徑
- 中小學(xué)、幼兒園安全防范要求
- 農(nóng)村建房的鄰居協(xié)議書模板
評(píng)論
0/150
提交評(píng)論