Re: [問題] 初學做小程式

看板java作者 (痞子軍團團長)時間15年前 (2010/06/10 02:39), 編輯推噓0(002)
留言2則, 2人參與, 最新討論串2/2 (看更多)
※ 引述《withdrawn (翔)》之銘言: : 這學期老師剛交完 : 期末要給他看一個物件導向程式 : 須用到封裝.繼承.抽象.多型.建構子 : (用法都了解) : 問題是不知道從哪方面下手.. : 不知道要做什麼主題= = : 雖然說只有5% 還是想寫看看 畢竟以後還是要寫專題 我比較好奇的是... 如果用法都了解的話... 為甚麼還要煩惱做什麼主題? 如果只是講到這邊,大概又會說版主在酸人 秉持著把 Java 版糟糕化的任務(喂喂!) 只好以身作則...... [挺] (建議使用空白鍵翻頁 \囧/) - 首先,你必須要先知道 即使是封裝,也不是程式必需品 就算是你打算寫出一個作業系統 你還是可以完全沒有任何封裝的行為 更不用說後頭的繼承、多型之類的鬼東西 (當然,請不要真的這樣嘗試... XDrz) 還是那句話 「道不虛明、有為而發」 你必須要先體驗到「棍!這樣下去好煩」 進階版是可以感覺到「棍!這樣下去以後會有爆炸的危險」 為了解決這些問題,所以找了這些技術來克服 我覺得這樣才有意義... 以我的標準來說,這樣才算「會」那些東西 (所以,其實我還是不確定多型是啥東西... 只是寫出來的程式,人家說:「這就是多型啊 [毆]」) - 如果你真的純粹只想交作業 那麼,一個剛開始寫程式要會的印星星金字塔 也是可以搞出那些東西的 [茶] ========== 不負責任程式碼開始了 ========== //Pyramid.java public abstract class Pyramid extends BbsBuilding { Pyramid(char brick, int level) { super(brick); build(level); } @Override public void build(int level) { for (int i = 0; i < level; i++) { fillFloor(i); nextFloor(); } } public static void show(Pyramid pyramid) { pyramid.takePicture(); } public static void main(String[] args) { StarPyramid star = new StarPyramid(5); Pyramid.show(star); MysteriousPyramid mysterious = new MysteriousPyramid(25); Pyramid.show(mysterious); GhostPyramid nothing = new GhostPyramid(10); Pyramid.show(nothing); } } //StarPyramid.java public class StarPyramid extends Pyramid{ public StarPyramid(int level) { super('*', level); } } //MysteriousPyramid.java public class MysteriousPyramid extends Pyramid { MysteriousPyramid(int level) { super('?', level); } } //GhostPyramid.java public class GhostPyramid extends Pyramid { public GhostPyramid(int level) { super(' ', level); } } //BbsBuilding.java import java.util.ArrayList; public abstract class BbsBuilding implements Building { ArrayList<String> building; private String floor = ""; private char brick; BbsBuilding(char brick) { this.brick = brick; building = new ArrayList<String>(); } @Override public void fillFloor(int size) { for (int i = 0; i <= size; i++) { floor += brick; } } @Override public void nextFloor() { building.add(floor); floor = ""; } private final int CONSOLE_WIDTH = 77; private final int CONSOLE_HIGHT = 21; //TODO level > 80 will break pic @Override public void takePicture() { // 相框下緣 System.out.print("+"); drawLineBy(0, CONSOLE_WIDTH - this.getClass().getName().length() - 4, '-'); System.out.println(this.getClass().getName() + "---+"); // 留白 for (int i = building.size(); i < CONSOLE_HIGHT - 2; i++) { System.out.print("|"); drawLineBy(0, CONSOLE_WIDTH - 1, ' '); System.out.println("|"); } // 建築主體 for (int i = getTopFloor(); i < building.size(); i++) { System.out.print("|"); System.out.print(building.get(i)); drawLineBy(building.get(i).length() + 1, CONSOLE_WIDTH, ' '); System.out.println("|"); } // 相框下緣 System.out.print("+"); drawLineBy(0, CONSOLE_WIDTH - 1, '-'); System.out.println("+"); } private void drawLineBy(int start, int end, char c) { for (int i = start; i < end; i++) { System.out.print(c); } } private int getTopFloor() { if (building.size() > CONSOLE_HIGHT) { return building.size() - CONSOLE_HIGHT + 2; } else { return 0; } } } //Building.java public interface Building { void build(int level); void fillFloor(int size); void nextFloor(); //TODO next version will make Camera interface and cancel this behavior public void takePicture(); } ========== 以下為執行結果,請將此行對齊螢幕頂端,用空白鍵翻頁 ========== +--------------------------------------------------------------StarPyramid---+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | |* | |** | |*** | |**** | |***** | +----------------------------------------------------------------------------+ +--------------------------------------------------------MysteriousPyramid---+ |??????? | |???????? | |????????? | |?????????? | |??????????? | |???????????? | |????????????? | |?????????????? | |??????????????? | |???????????????? | |????????????????? | |?????????????????? | |??????????????????? | |???????????????????? | |????????????????????? | |?????????????????????? | |??????????????????????? | |???????????????????????? | |????????????????????????? | +----------------------------------------------------------------------------+ +-------------------------------------------------------------GhostPyramid---+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +----------------------------------------------------------------------------+ ㄜ... 該不該寫信給出作業的老師,以防有人拿這個版本交差呢? [核爆] -- 錢鍾書: 說出來的話 http://www.psmonkey.org 比不上不說出來的話 Java 版 cookcomic 版 只影射著說不出來的話 and more...... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 219.70.214.149

06/10 12:42, , 1F
我以為GhostPyramid反白有東西
06/10 12:42, 1F

06/10 13:10, , 2F
ㄜ... 理論上是有... [茶]
06/10 13:10, 2F
文章代碼(AID): #1C3z_eUL (java)
討論串 (同標題文章)
文章代碼(AID): #1C3z_eUL (java)