Java編程100例包括詳細步驟_第1頁
Java編程100例包括詳細步驟_第2頁
Java編程100例包括詳細步驟_第3頁
Java編程100例包括詳細步驟_第4頁
Java編程100例包括詳細步驟_第5頁
已閱讀5頁,還剩13頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

Java趣味編程100例.../第1章變幻多姿的圖表1.1金字塔圖案1.問題描述打印出金字塔圖案,如圖1.1所示。2.問題分析這個問題是一個很經(jīng)典的循環(huán)應(yīng)用的題目。我們都知道,打印輸出的時候,都是從最左端輸出,而這里,第一個星號是在中間。這實際是因為星號之前有很多空格。當(dāng)我們使用問號來表示空格,實際的輸出效果應(yīng)該是圖1.2的形式。 圖1.1金字塔 圖1.2金字塔的分析圖從圖1.2分析,我們就可以發(fā)現(xiàn)這個題目的奧秘了?!?確定程序框架從圖1.2中,我們可以發(fā)現(xiàn),一共需要打印5行,而每一行都是打印幾個空格,然后再打印幾個星號。這樣我們就可以寫出程序框架了。程序框架代碼如下:publicclassCh1_1{ publicstaticvoidmain<String[]args> {**************for<i=1;i<=5;i++> //循環(huán)5次,打印5行{ //打印若干個空格 //打印若干個星號}}}由于我們這里明確知道打印的行數(shù),所以我們使用for循環(huán)來實現(xiàn)。下面我們就需要考慮如何打印每行的星號。〔2尋找空格和星號的規(guī)律從圖1.2中,我們可以發(fā)現(xiàn):第1行的空格為4個,第2行是3個,第3行是2個,……,每行依次遞減,直至最后一行空格數(shù)為0;而星號數(shù)目是第1行是1個,第2行是3,第3行是5,……,每行依次遞增2,直至最后一行星號數(shù)為9??偨Y(jié)數(shù)據(jù),我們可以得到表1.1所示的規(guī)律。表1.1空格和星號的規(guī)律行數(shù)空格數(shù)星號數(shù)145–111*2–1235–232*2–1325–353*2–1415–474*2–1505–595*2–1規(guī)律依次遞減15–行數(shù)依次遞增2行數(shù)*2–1從表1.1中,我們不難發(fā)現(xiàn)行數(shù)和空格數(shù)、星號數(shù)之間有一種很有趣的聯(lián)系。根據(jù)這個聯(lián)系,我們就可以考慮完善我們上面的程序了?!?打印空格數(shù)由于每行空格數(shù)有著"5–行數(shù)"的規(guī)律。所以在第i行的時候,空格數(shù)就為5–i。所以我們只要把5–i個空格打印出來即可。對應(yīng)代碼如下:for<i=1;i<=n;i++>{ for<j=1;j<=n-i;j++> //根據(jù)外層行號,輸出星號左邊空格 System.out.print<"">;}雖然每行的空格數(shù)不同,但是對于特定的行,其空格數(shù)是固定的,所以循環(huán)打印的次數(shù)是確定的。所以這里同樣適用了for循環(huán)?!?打印星號數(shù)由于每行星號數(shù)有著"行數(shù)*2–1"的規(guī)律。所以在第i行的時候,星號數(shù)就為2*i–1。所以我們只要把2*i–1個星號打印出來即可。對應(yīng)代碼如下:for<i=1;i<=5;i++>{for<k=1;k<=2*i-1;k++> //根據(jù)外層行號,輸出星號個數(shù) System.out.printf<"*">;}〔5完整程序現(xiàn)在我們就需要把剛才的程序進行組合,構(gòu)成我們的完整程序。importjava.util.Scanner;publicclassCh1_1{ publicstaticvoidmain<String[]args> { inti,j,k,n; Scannerinput=newScanner<System.in>; System.out.print<"請輸入金字塔層數(shù):">; n=input.nextInt<>;//外層循環(huán)控制層數(shù) for<i=1;i<=n;i++> {//根據(jù)外層行號,輸出星號左邊空格 for<j=1;j<=n-i;j++> System.out.print<"">;//根據(jù)外層行號,輸出星號個數(shù) for<k=1;k<=2*i-1;k++> System.out.printf<"*">;//一行結(jié)束,換行 f<"\n">; } }}〔6擴展訓(xùn)練為了方便大家訓(xùn)練,我們提供幾個金字塔圖案的同胞兄弟——倒金字塔、直角三角形,如圖1.3所示。大家可以嘗試和它們過過招。圖1.3各種形狀圖案1.2九九乘法表1.問題描述輸出九九乘法口訣表,如圖1.4所示。圖1.4九九乘法口訣表2.問題分析觀察九九乘法口訣表,可以得出圖表的規(guī)律:總共有9行,第幾行就有幾個表達式。同時要注意每行表達式的規(guī)律:第j行,表達式就從j*1開始,一直到j(luò)*j結(jié)束,共有j個表達式,這個效果可以通過一次循環(huán)實現(xiàn)。這樣的話,正好可以通過雙重循環(huán)來控制輸出,外層循環(huán)控制行數(shù),內(nèi)層循環(huán)控制列。還有個地方需要注意的是,內(nèi)層和外層之間的聯(lián)系,內(nèi)層列的個數(shù)是根據(jù)外層的行數(shù)來控制的。〔1確定程序框架從圖1.4中,我們可以發(fā)現(xiàn),一共需要打印9行,每行又有若干個表達式,可以通過雙重循環(huán)來實現(xiàn),外層循環(huán)控制行數(shù),內(nèi)層循環(huán)控制列,這樣我們就可以寫出程序框架了。程序框架代碼如下:publicclassCh1_2{ publicstaticvoidmain<String[]args> { //外循環(huán)控制行數(shù) for<inti=1;i<10;i++> { //內(nèi)循環(huán)控制每行表達式個數(shù) for<intj=1;j<=n;j++> { //輸出表達式 } //一行結(jié)束換行 System.out.println<>; } }}〔2尋找每行表達式個數(shù)規(guī)律從圖1.4中,我們可以發(fā)現(xiàn),第1行一個表達式,第2行兩個表達式,第3行三個表達式,……,第幾行就有幾個表達式,所以內(nèi)循環(huán)控制列的個數(shù)的變量n等于控制外循環(huán)個數(shù)的變量i,所以內(nèi)循環(huán)代碼就可以寫成如下形式:for<intj=1;j<=i;j++> //內(nèi)循環(huán)控制每行表達式個數(shù),i代表行數(shù)〔3表達式寫法表達式的寫法都是一致:乘數(shù)1*乘數(shù)2=積。從圖1.4中,我們可以發(fā)現(xiàn)每行表達式的規(guī)律:第i行,表達式就從i*1開始,一直到i*j結(jié)束。乘數(shù)1不變,一直是i,其實就是行數(shù),乘數(shù)2從1變化到j(luò),正好與內(nèi)循環(huán)變量變化一樣,所以乘數(shù)2就可以用j表示。所以表達式的寫法如下:i+"*"+j+"="+i*j //i代表行,j代表列〔4完整程序現(xiàn)在我們就需要把剛才的程序進行組合,構(gòu)成我們的完整程序:publicclassCh1_2{ publicstaticvoidmain<String[]args> { //外循環(huán)控制行數(shù) for<inti=1;i<10;i++> { //內(nèi)循環(huán)控制每行表達式個數(shù) for<intj=1;j<=i;j++> { System.out.print<""+i+"*"+j+"="+<i*j>>; } //一行結(jié)束換行 System.out.println<>; } }}〔5運行結(jié)果運行程序,結(jié)果如圖1.5所示。圖1.5程序輸出結(jié)果1.3余弦曲線1.問題描述在屏幕上畫出余弦函數(shù)cos<x>曲線,如圖1.6所示。圖1.6余弦函數(shù)cos<x>曲線2.問題分析連續(xù)的曲線是由點組成的,點與點之間距離比較近,看上去就是曲線了,畫圖的關(guān)鍵是畫出每個點。Java提供了三角函數(shù)方法,直接調(diào)用cos<>方法就可以根據(jù)x坐標計算出y坐標。需要注意的是,cos<>方法輸入的參數(shù)是弧度值,要進行坐標轉(zhuǎn)換,同樣,得到的結(jié)果也要進行轉(zhuǎn)換處理。從圖1.6中可以看出,這條余弦曲線有兩個周期,我們可以把x坐標控制在0~720?!?確定程序框架從圖1.6中,我們可以發(fā)現(xiàn),整個圖形包括x軸、y軸及余弦曲線。控制臺不方便輸出圖形,這里以Applet形式輸出。這樣我們就可以寫出程序框架了,代碼如下:publicclassCh1_3extendsApplet{ intx,y; publicvoidstart<> //當(dāng)一個Applet被系統(tǒng)調(diào)用時,系統(tǒng)會自動調(diào)用 start<>方法 { Graphicsg=getGraphics<>; //畫畫之前,必須先取得畫筆 //畫x軸 //畫y軸 //畫cos<x>曲線 }}〔2畫x軸為了畫出圖1.6所示效果,我們可以把坐標原點設(shè)定為〔360,200,x軸就是從左到右的很多點組成,通過循環(huán)語句很容易實現(xiàn),代碼如下:for<x=0;x<=750;x+=1>{ g.drawString<"·",x,200>; //畫x軸}細心的讀者會發(fā)現(xiàn),x軸上還有個箭頭,這個是如何實現(xiàn)的呢,其實很簡單,是由兩條線段交匯而成。為方便起見,兩條線段都與x軸成45角,很容易得到表達式的方程:y=x–550,y=950–x。代碼如下:for<x=740;x<=750;x+=1>{ g.drawString<"·",x,x-550>; //x軸上方斜線 g.drawString<"·",x,950-x>; //x軸下方斜線}〔3畫y軸參考上面x軸的繪制,很容易畫出y軸,代碼如下://y軸for<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中可以看出,這條余弦曲線有兩個周期,我們可以把x坐標控制在0~720。cox<x>返回的結(jié)果小于1,為了看到圖1.6效果,必須進行放大處理,這里放大了80倍,同時把圖形向下平移了200個像素。代碼如下://兩個周期,即4Лfor<x=0;x<=720;x+=1>{ a=Math.cos<x*Math.PI/180>; y=<int><200+80*a>; //放大80倍并向下平移200個像素 g.drawString<"·",x,y>;}〔5完整程序現(xiàn)在我們就需要把剛才的程序進行組合,構(gòu)成我們的完整程序:importjava.applet.*;importjava.awt.*;publicclassCh1_3_2extendsApplet{ intx,y; publicvoidstart<> { //畫畫之前,必須先取得畫筆 Graphicsg=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軸箭頭 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> { doublea=Math.cos<x*Math.PI/180+Math.PI>; y=<int><200+80*a>; //放大80倍并向下平移200個像素 g.drawString<"·",x,y>; } }}Ch1_3.html網(wǎng)頁代碼如下:<html><head><title>余弦曲線測試</title></head></body><p><!--調(diào)用Ch1_3字節(jié)碼文件--><appletcode=Ch1_3.class<!--設(shè)置窗口大小-->width=900height=600></applet></body></html>〔6運行結(jié)果把Ch1_3.java文件編譯后的Ch1_3.class文件放到Ch1_3.html網(wǎng)頁同一目錄下,直接用IE瀏覽器打開Ch1_3.html,運行程序,結(jié)果如圖1.6所示。3.?dāng)U展訓(xùn)練前面介紹的余弦曲線的繪制,我們看到的是一個完整的靜態(tài)圖形,能否動態(tài)地展現(xiàn)繪制的過程?答案是肯定的,我們可以采用線程的方式來實現(xiàn),參考代碼如下:importjava.applet.Applet;importjava.awt.Color;importjava.awt.Graphics;publicclassdonghua_cosextendsAppletimplementsRunnable //通過實現(xiàn)Runnable接口實現(xiàn)線程操作{ intx,y; doublea; intxpos=0; Threadrunner; booleanpainted=false; publicvoidinit<> //Applet創(chuàng)建即啟動執(zhí)行,坐標初始化 { //TODOAuto-generatedmethodstub Graphicsg=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=360;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>; } } publicvoidstart<> //Applet創(chuàng)建后自啟動方法 { //TODOAuto-generatedmethodstub if<runner==null>{ runner=newThread<this>; //通過Thread類來啟動Runnable runner.start<>; //線程啟動 } } publicvoidstop<> //Applet生命周期結(jié)束后自啟動方法 { //TODOAuto-generatedmethodstub if<runner!=null>{ runner=null; //結(jié)束線程 } } publicvoidrun<> //線程運行方法 { //TODOAuto-generatedmethodstub while<true>{ f //循環(huán)設(shè)置曲線x軸坐標邊界 { repaint<>; //調(diào)用paint<>方法 try{ Thread.sleep<100>; //線程休息100毫秒 }catch<InterruptedExceptione>{} if<painted> { painted=false; } } } } publicvoidpaint<Graphicsg> //畫圖方法 { 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.drawString<"·",x,y>; } painted=true; }1.4奧運五環(huán)旗1.問題描述圖1.7奧運五環(huán)旗在屏幕上畫出奧運五環(huán)旗,如圖1.7所示。圖1.7奧運五環(huán)旗2.問題分析觀察奧運五環(huán)旗的圖案,直觀的感覺,由五個圓組成,每個圓的顏色不一樣,大小一樣,按照一定的位置擺放,找到圓心坐標的規(guī)律,就可以通過Graphics類提供的繪制橢圓的方法drawOval<>來實現(xiàn)畫圓操作?!?確定程序框架奧運五環(huán)旗由五個不同顏色的圓組成,我們可以通過循環(huán)依次輸出五個圓環(huán)??刂婆_不方便輸出圖形,這里以Applet形式輸出。這樣我們就可以寫出程序框架了,代碼如下:publicclassCh1_4_3extendsApplet //簡單實用為主{ //paint<>方法是由瀏覽器調(diào)用的。每當(dāng)Applet需要刷新的時候都會調(diào)用該方法 publicvoidpaint<Graphicsg> { for<inti=0;i<5;i++> { //設(shè)置當(dāng)前圓的顏色 //根據(jù)圓心坐標畫出當(dāng)前圓 } }}〔2圓環(huán)的坐標分析分析出圓的圓心坐標是畫圖的關(guān)鍵,對照圖1.8標示,分析圓的位置規(guī)律。OO圖1.8奧運五環(huán)旗坐標分析上面三個圓的圓心a、b、c的y坐標相同,下面兩個圓的圓心d、e的y坐標相同,ab=bc=ad=de,為保證兩個圓相交,兩個圓的圓心距離必須小于2r〔r代表圓的半徑。f為ab的中點,adf組成直角三角形,af=ad/2,只要給定五個圓的任何一個圓心坐標,就可以推倒出其他幾個圓的圓心坐標。我們這里使用數(shù)組來存放每個圓環(huán)的顏色、坐標。代碼如下://clr[]存儲顏色privateColorclr[]={Color.blue,Color.black,Color.red,Color.yellow,Color.green};//x[]存儲圓心的x坐標privateint[]x={100,136,172,118,154};//y[]存儲圓心的y坐標privateint[]y={60,60,60,91,91};//r代表半徑Privater=20;〔3畫五環(huán)旗根據(jù)上面給出的圓的圓心坐標,通過循環(huán)語句控制,依次畫出每個圓環(huán)。代碼如下:for<inti=0;i<5;i++>{ //設(shè)置顏色 g.setColor<clr[i]>; //畫圓,第一個參數(shù)代表圓心x坐標,第二個參數(shù)代表圓心y坐標 g.drawOval<x[i],y[i],d,d>;}〔4完整程序現(xiàn)在我們就需要把剛才的程序進行組合,構(gòu)成我們的完整程序:importjava.awt.*;importjava.awt.event.*;importjava.applet.Applet;importjava.awt.Color;importjava.awt.Font;publicclassCh1_4extendsApplet{ privateColorclr[]={Color.blue,Color.black,Color.red,Color.yellow, Color.green}; //clr[]存儲顏色 privateint[]x={100,136,172,118,154}; //x[]存儲圓心的x坐標 privateint[]y={60,60,60,91,91}; //y[]存儲圓心的y坐標 privateint[][]xy={{100,60},{136,60},{172,60},{118,91},{154,91}}; //存儲圓心的坐標 privateintr=20,d=40; publicvoidpaint<Graphicsg> //畫圖方法 { //文字字體、大小 g.setFont<font>; for<inti=0;i<5;i++> //循環(huán)5次,畫5個圓環(huán) { g.setColor<clr[i]>; g.drawOval<x[i],y[i],d,d>; } g.setColor<Color.blue>; //設(shè)置顏色 g.setFont<font>; g.drawString<"奧運五環(huán)旗",120,169>; } //ENDPAINT} //ENDCLASS圖1.9程序輸出結(jié)果〔5運行結(jié)果圖1.9程序輸出結(jié)果再編寫一個測試Ch1_4.html文件,內(nèi)容參考前面的代碼,把Ch1_4.java文件編譯后的Ch1_4.class文件放到Ch1_4.html文件同一目錄下,直接用IE瀏覽器打開Ch1_4.html,運行程序,結(jié)果如圖1.9所示。3.?dāng)U展訓(xùn)練圖1.9所示奧運五環(huán)旗沒有圖1.7看著舒服,線條有點細,如果能加粗就好了,可惜Graphics類創(chuàng)建的畫筆的粗細是默認的,我們不能改變它。有人提出一個圓環(huán)可以由兩個圓重疊而成,通過在一個圓的內(nèi)部緊貼一個稍小的圓即可達到加粗線條的目的,這個思路是可以的,感覺比較麻煩喲,感興趣可以試一下,有沒有簡單點的辦法?答案是肯定的。我們可以通過Graphics2D類來實現(xiàn),Graphics2D類擴展Graphics類,以提供對幾何形狀、坐標轉(zhuǎn)換、顏色管理和文本布局更為復(fù)雜的控制。參考代碼如下:publicvoidpaint<Graphicsg>{ Fontfont=newFont<"楷體",Font.PLAIN,20>; //文字字體、大小 BasicStrokea=newBasicStroke<3.0f>; //粗細設(shè)置對象 <<Graphics2D>g>.setStroke<a>; //設(shè)置粗細 for<inti=0;i<5;i++> //循環(huán)5次,畫5個圓環(huán) { <<Graphics2D>g>.setColor<clr[i]>; //設(shè)置圓環(huán)的顏色 <<Graphics2D>g>.drawOval<x[i],y[i],d,d>; } g.setColor<Color.blue>; //設(shè)置文字顏色 g.setFont<font>; g.drawString<"奧運五環(huán)旗",120,169>;} //ENDPAINT1.5楊輝三角1.問題描述根據(jù)輸入行數(shù),打印出楊輝三角形,如圖1.10所示。2.問題分析觀察楊輝三角形的圖案,可以發(fā)現(xiàn)其中的規(guī)律:三角形的豎邊和斜邊都是"1",三角形里面的任意一個數(shù)字正好等于它正上方的數(shù)字和左上角的數(shù)字兩個數(shù)字之和。第幾行就有幾個數(shù)字,可以把它補充成如圖1.11所示效果。 圖1.10楊輝三角形 圖1.11方陣方陣〔行列相等的矩陣大家都很熟悉了,可以通過二維數(shù)組來處理方陣,一個雙重循環(huán)就能實現(xiàn),外循環(huán)控制行數(shù),內(nèi)循環(huán)控制列來完成方陣內(nèi)數(shù)字的計算和存儲?!?確定程序框架由前面的問題分析可知,先從鍵盤接收楊輝三角的高度,然后通過二維數(shù)組計算存儲楊輝三角,最后把楊輝三角打印出來。程序框架代碼如下:publicclassCh1_5{ publicstaticvoidmain<String[]args> { System.out.print<"請輸入行數(shù):">; Scannerscanner=newScanner<System.in>; intnum=scanner.nextInt<>; //鍵盤接收行數(shù) int[][]ary=getTriangle<num>; //得到楊輝三角 print<ary>; //打印楊輝三角 }}〔2得到楊輝三角由前面的問題分析可知,用二維數(shù)組計算存儲楊輝三角,楊輝三角豎邊、斜邊都為1,可以先賦值,然后再給中間元素賦值,當(dāng)前位置的值等于它的上方數(shù)和左上角上的數(shù)之和。程序代碼如下:privatestaticint[][]getTriangle<intnum>{ int[][]ary=newint[num][num]; //用二維數(shù)組存儲 for<inti=0;i<ary.length;i++> //豎邊、斜邊置1 { ary[i][0]=1; ary[i][i]=1; } for<inti=1;i<ary.length;i++> //外循環(huán)控制行數(shù) { for<intj=1;j<=i;j++> //內(nèi)循環(huán)控制列 { //里面部分,等于當(dāng)前位置的上方和左上角之和 ary[i][j]=ary[i-1][j-1]+ary[i-1][j]; } } returnary;}〔3打印楊輝三角楊輝三角保存在二維數(shù)組中,通過一個雙重循環(huán)就可以打印出來,但是要注意的是,不需要把所有元素都打印出來,內(nèi)循環(huán)列的控制要小于等于當(dāng)前行數(shù)。程序代碼如下:privatestaticvoidprint<int[][]ary>{ for<inti=0;i<ary.length;i++> //外循環(huán)控制行 { for<intj=0;j<=i;j++> //內(nèi)循環(huán)控制列 { System.out.printf<"%-3d",ary[i][j]>; } System.out.println<>; //換行 }}〔4完整程序現(xiàn)在我們就需要把剛才的程序進行組合,構(gòu)成我們的完整程序:importjava.util.Scanner;publicclassCh1_5{ publicstaticvoidmain<String[]args> { System.out.print<"請輸入行數(shù):">; Scannerscanner=newScanner<System.in>; intnum=scanner.nextInt<>; //從鍵盤接收行數(shù) int[][]ary=getTriangle<num>; //得到楊輝三角 print<ary>; //打印楊輝三角 } //得到楊輝三角 privatestaticint[][]getTriangle<intnum> { int[][]ary=newint[num][num]; //用二維數(shù)組存儲 for<inti=0;i<ary.length;i++> //豎邊、斜邊置1 { ary[i][0]=1; ary[i][i]=1; } for<inti=1;i<ary.length;i++> //外循環(huán)控制行 { for<intj=1;j<=i;j++> //內(nèi)循環(huán)控制列 { //里面部分,等于當(dāng)前位置的上方和左上角之和 ary[i][j]=ary[i-1][j-1]+ary[i-1][j]; } } returnary; } privatestaticvoidprint<int[][]ary> { for<inti=0;i<ary.length;i++> //外循環(huán)控制行 { for<intj=0;j<=i;j++> //內(nèi)循環(huán)控制列 { System.out.printf<"%-3d",ary[i][j]>; } System.out.println<>; //輸出換行 } }}〔5運行結(jié)果運行程序,結(jié)果如圖1.12所示。圖1.12程序輸出結(jié)果3.?dāng)U展訓(xùn)練圖1.12輸出的楊輝三角是直角三角形,能不能輸出等腰三角形呢?答案是肯定的。等腰三角形類似于前面的金字塔圖案,參考前面介紹的思路,不難輸出等腰三角形?!?參考代碼importjava.util.*;publicclassCh1_5_2{publicstaticvoidmain<String[]args>{ Scannerin=newScanner<System.in>; //獲取控制臺輸入對象 System.out.print<"請輸入行號:">; intm=in.nextInt<>; //從鍵盤接收輸入 intn=2*m-1; //列元素個數(shù) intarr[][]=newint[m][n]; for<inti=0;i<m;i++> //外循環(huán)控制行 { for<intj=0;j<n;j++> //內(nèi)循環(huán)控制列 { if<j<<m-i-1>||<j>=<m+i>>> //輸出等腰三角形兩邊空格 System.out.print<"">; elseif<<j==<m-i-1>>||<j==<m+i-1>>> //計算并輸出等腰三角形兩個腰 { arr[i][j]=1; System.out.printf<"%-3d",arr[i][j]>; } elseif<<i+j>%2==0&&m%2==0||<i+j>%2==1&&m%2==1> System.out.print<"">; else //計算并輸出中間數(shù)字 { arr[i][j]=arr[i-1][j-1]+arr[i-1][j+1]; System.out.printf<"%-3d",arr[i][j]>; } }System.out.println<>; //輸出換行 }}}〔2運行結(jié)果運行程序,結(jié)果如圖1.13所示。圖1.13程序輸出結(jié)果1.6國際象棋棋盤1.問題描述打印出國際象棋棋盤,如圖1.14所示。圖1.14國際象棋棋盤2.問題分析圖1.14國際象棋棋盤觀察國際象棋棋盤的圖案,可以發(fā)現(xiàn)其中的規(guī)律:棋盤由八行八列黑白方塊相間組成,可以用i控制行,j來控制列,根據(jù)i+j的和的變化來控制輸出黑方塊還是白方塊。這里我們使用了Swing的標簽組件JLable,通過設(shè)置JLabel組件的背景色和透明度來實現(xiàn)黑白方塊?!?確定程序框架這是一個繪圖案例,這里我們采用JFrame創(chuàng)建窗口,然后在窗口里添加JLabel標簽組件,通過前面的問題分析可知,JLabel標簽要設(shè)置一些屬性實現(xiàn)黑白方塊,然后顯示窗口,實現(xiàn)如圖1.14所示的效果。程序框架代碼如下:publicclassCh1_6{ publicstaticvoidmain<String[]args> { JFramef=newJFrame<"國際象棋棋盤">; //窗口屬性設(shè)置JLabell=newJLabel<>; //生成標簽實例 //標簽屬性設(shè)置 f.add<l>; //添加標簽 f.setVisible<true>; //顯示窗口 }}〔2窗口屬性設(shè)置窗口屬性設(shè)置包括窗口大小、位置等設(shè)置,其中窗口大小要滿足能夠容納黑白方格,這里指定黑白方格大小為:20*20,那么窗口屬性大小大概為:168*195。窗口位置可以隨便指定,這里指定為:〔350,200。程序代碼如下://窗口設(shè)置大小f.setSize<168,195>; //邊框的長和寬//窗口設(shè)置位置Pointpoint=newPoint<350,200>;f.setLocation<point>;ublicclassCh1_6〔3標簽屬性設(shè)置標簽的屬性主要是標簽的位置及背景色,棋盤是由八行八列黑白方塊相間組成,可以通過雙重循環(huán)來實現(xiàn),用i控制行,j來控制列,位置很容易設(shè)置,根據(jù)i+j的和的變化來設(shè)置背景色,表示黑方塊還是白方塊。程序代碼如下:intgrids=8; //行數(shù)和列數(shù)intgridsize=20; //單元格的高和寬for<inti=0;i<grids;i++>{ for<intj=0;j<grids;j++> { JLabell=newJLabel<>; //生成標簽實例 l.setSize<gridsize,gridsize>; //設(shè)置標簽大小 l.setLocation<i*gridsize,j*gridsize>; //設(shè)置標簽位置 if<<i+j>%2==0> {//當(dāng)小方格的坐標和剛好是偶數(shù)時, l.setBackground<Color.black>; //設(shè)置方格為黑色 l.setOpaque<true>; //設(shè)置為不透明 } else { l.setBackground<Color.white>; //設(shè)置方格為白色 l.setOpaque<true>; //設(shè)置為不透明 } l.setBorder<BorderFactory.createLineBorder<Color.black>>; //設(shè)置邊界為黑色…… }}〔4完整程序現(xiàn)在我們就需要把剛才的程序進行組合,構(gòu)成我們的完整程序:importjava.awt.Color;importjava.awt.Point;importjavax.swing.BorderFactory;importjavax.swing.JFrame;importjavax.swing.JLabel;publicclassCh1_6{ publicstaticvoidmain<String[]args> { JFramef=newJFrame<"國際象棋棋盤">; //創(chuàng)建窗口 //窗口設(shè)置大小 f.setSize<168,195>; //邊框的長和寬 //窗口設(shè)置位置 Pointpoint=newPoint<350,200>; f.setLocation<point>; intgrids=8; //行數(shù)和列數(shù) intgridsize=20; //單元格的高和寬 for<inti=0;i<grids;i++> //外循環(huán)控制行 { for<intj=0;j<grids;j++> //內(nèi)循環(huán)控制列 { JLabell=newJLabel<>; //生成標簽實例 l.setSize<gridsize,gridsize>; //設(shè)置標簽大小 l.setLocation<i*gridsize,j*gridsize>; //設(shè)置標簽位置 if<<i+j>%2==0> {//當(dāng)小方格的坐標和剛好是偶數(shù)時, l.setBackground<Color.black>; //設(shè)置方格為黑色

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論