Re: [問題] 初學做小程式
※ 引述《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
06/10 12:42, 1F
→
06/10 13:10, , 2F
06/10 13:10, 2F
討論串 (同標題文章)