如果諸葛亮會寫程式,用Java寫出師表...

如果諸葛亮會寫程式,用Java寫出師表...

繼上一篇《如果諸葛亮用C#寫出師表...》後,站長想自己的第一語言是Java,雖然平時工作上用的不多,也用Java實現一遍吧,改改就是了

最後更新 2021/3/19 上午10:28
沙漠尽头的狼
預計閱讀 8 分鐘
分類
更多語言
標籤
.NET C# Java 出師表

繼上一篇 "如果諸葛亮用 C#寫出師表..." 後,站長想自己的第一語言是 Java,雖然平時工作上用的不多,也用 Java 實現一遍吧,改改就是了,無非就是:

  1. C#Console.WriteLine 改為 JavaSystem.out.println
  2. C#string 改為 JavaString
  3. C#bool 改為 Javaboolean
  4. C# 的繼承符號 : 改為 Javaextends
  5. C# 的斷言 Debug.Assert 改為 Javaassert

不到半小時,Java 版出師表 就新鮮出爐了,和上篇聲明一樣,純粹無聊寫著玩,讀者別在意列舉、類名、變數中文命名,純粹為了娛樂。


出師表背景再來一次

今天讓我們碼農以特有的方式,來表達對丞相大人的敬仰與懷念!

蜀章武元年(221 年),劉備稱帝,諸葛亮為丞相。蜀漢建興元年(223 年),劉備病死,將劉禪託付給諸葛亮。諸葛亮實行了一系列比較正確的政治和經濟措施,使蜀漢境內呈現興旺景象。為了實現全國統一,諸葛亮在平息南方叛亂之後,於建興五年(227 年)決定北上伐魏,擬奪取魏的長安,臨行之前上書後主,即這篇《出師表》。

Java 原始碼

定義的一些類、列舉

public enum 王道 {明, 昏}

/*
 * 先帝,陛下,文景,桓靈
 */
static class 君 {
    public String 名稱;
    public boolean 在;
    public 王道 為君;

    public 君() {
        在 = true;
        為君 = 王道.明;
    }

    public boolean 創業(double percentage) {
        if (percentage < 0.5) {
            在 = false;
            System.out.println("創業未半而中道崩殂!");
            return false;
        } else {
            System.out.println("興復漢室,還於舊都!");
            return true;
        }
    }

    public void 開張聖聽() {
        System.out.println("開張聖聽,光先帝遺德!");
    }

    public void 恢弘志士之氣() {
    }

    public void 賓自菲薄() {
    }

    public void 引喻失義() {
        System.out.println("塞忠諫之路!");
    }

    public void 親賢臣遠小人() {
        為君 = 王道.明;
    }

    public void 親小人遠賢臣() {
        為君 = 王道.昏;
    }

    public void 治國() {
    }

    public void 偏私() {
        System.out.println("內外異法!");
    }

    public boolean 咨之(String 事) {
        if (王道.明 == 為君) {
            return true;
        }

        return false;
    }

    public boolean 施行(String 事) {
        return true;
    }

    public void 曰(String 言) {
        System.out.println(言);
    }

    public void 每與臣論此事() {
        System.out.println("嘆息痛恨於桓靈。");
    }
}


static enum 臣德 {賢, 奸}

static class 侍衛之臣 {
    private 君 劉備 = new 君();
    private 君 劉禪 = new 君();

    public String 名稱;
    public 臣德 為臣;

    public void 不懈於內() {
        System.out.println("侍衛之臣" + 名稱 + "不懈於內");
    }

    public boolean 追先帝之殊遇() {
        if (劉備.為君 == 王道.明) {
            return true;
        } else {
            return false;
        }
    }

    public boolean 報之於陛下() {
        if (劉禪.為君 == 王道.明) {
            return true;
        } else {
            return false;
        }
    }

    public boolean 謀事(String 事) {
        if (為臣 == 臣德.賢) {
            return true;
        }

        return false;
    }
}

static class 忠志之士 {
    private 君 劉備 = new 君();
    private 君 劉禪 = new 君();

    public String 名稱;
    public 臣德 為臣 = 臣德.賢;

    public void 忘身於外() {
        System.out.println("忠志之士" + 名稱 + "忘身於外!");
    }

    public boolean 追先帝之殊遇() {
        if (劉備.為君 == 王道.明) {
            return true;
        } else {
            return false;
        }
    }

    public boolean 報之於陛下() {
        if (劉禪.為君 == 王道.明) {
            return true;
        } else {
            return false;
        }
    }

    public boolean 謀事(String 事) {
        if (為臣 == 臣德.賢) {
            return true;
        }

        return false;
    }
}

public static enum 氣候 {興盛, 疲弊, 興隆, 傾頹}

/*
 * 曹魏,東吳,益州,先漢,後漢
 */
public static class 國 {
    public 氣候 國運;

    public 國() {
        國運 = 氣候.興盛;
    }

    public void 付諸有司論其刑賞(侍衛之臣 臣) {
        if (臣.為臣 == 臣德.賢) {
            System.out.println("賞!");
        } else {
            System.out.println("刑!");
        }
    }
}

/*
 * 郭攸之,費禕
 */
public static class 侍中 extends 侍衛之臣 {
}

;

/*
 * 董允
 */
public static class 侍郎 extends 侍衛之臣 {
}

/*
 * 陳震
 */
public static class 尚書 extends 侍衛之臣 {
}

/*
 * 張裔
 */
public static class 長史 extends 侍衛之臣 {
}

/*
 * 蔣琬
 */
public static class 參季 extends 侍衛之臣 {
}

/*
 * 向寵
 */
static class 中都督 extends 忠志之士 {
}

/*
 * 諸葛亮
 */
static class 丞相 extends 侍衛之臣 {
    public void 回首往事() {
        System.out.println("臣本布衣,躬耕於南陽,苟全性命於亂世,不求聞達於諸侯。先帝不以臣卑鄙,猥自枉屈,三顧臣於草廬之中,咨臣以當世之事,由是感激,遂許先帝以驅馳。後值顛覆,受任於敗軍之際,奉命於危難之間,爾來二十有一年矣。");
    }

    public void 表忠心() {
        System.out.println("先帝知臣謹慎,故臨崩寄臣以大事也。受命以來,夙夜憂嘆,恐託付不效,以傷先帝之明。故五月渡瀘,深入不毛。");
    }

    public void 請戰() {
        System.out.println("今南方已定,兵甲已足,當獎率三軍,北定中原,庶竭駑鈍,攘除奸凶,興復漢室, 還於舊都。");
    }

    public void 道別() {
        System.out.println("今當遠離, 臨表涕零, 不知所言。");
    }
}

Javamain 方法

public static void main(String[] args) {
    君 先帝 = new 君();
    先帝.名稱 = "先帝";
    先帝.創業(0.49);

    國 益州 = new 國();
    益州.國運 = 氣候.疲弊;

    System.out.println("此誠危急存亡之秋也!");

    侍中 郭攸之 = new 侍中();
    郭攸之.名稱 = "郭攸之";
    if (郭攸之.追先帝之殊遇() && 郭攸之.報之於陛下()) {
        郭攸之.不懈於內();
    }

    侍中 費禕 = new 侍中();
    費禕.名稱 = "費禕";
    if (費禕.追先帝之殊遇() && 費禕.報之於陛下()) {
        費禕.不懈於內();
    }

    侍郎 董允 = new 侍郎();
    董允.名稱 = "董允";
    if (董允.追先帝之殊遇() && 董允.報之於陛下()) {
        董允.不懈於內();
    }

    中都督 向寵 = new 中都督();
    向寵.名稱 = "向寵";
    if (向寵.追先帝之殊遇() && 向寵.報之於陛下()) {
        向寵.忘身於外();
    }

    君 陛下 = new 君();
    if (陛下.為君 == 王道.明) {
        陛下.開張聖聽();
        陛下.恢弘志士之氣();
    } else {
        陛下.賓自菲薄();
        陛下.引喻失義();
    }

    陛下.治國();

    boolean 宮中 = false;
    boolean 府中 = false;
    boolean 陟臧 = false;
    boolean 罰否 = false;
    assert (宮中 == 府中);
    assert (陟臧 == 罰否);

    侍衛之臣 作奸犯科者 = new 侍衛之臣();
    作奸犯科者.為臣 = 臣德.奸;
    侍衛之臣 為忠善者 = new 侍衛之臣();
    為忠善者.為臣 = 臣德.賢;
    if (陛下.為君 == 王道.明) {
        益州.付諸有司論其刑賞(作奸犯科者);
        益州.付諸有司論其刑賞(為忠善者);
    } else {
        陛下.偏私();
    }

    if (郭攸之.為臣 == 臣德.賢
            && 費禕.為臣 == 臣德.賢
            && 董允.為臣 == 臣德.賢) {
        System.out.println("此皆良實,志慮忠純,是以先帝簡拔以遺陛下。");
    }

    String 宮中之事 = null;
    if (陛下.咨之(宮中之事)
            && 郭攸之.謀事(宮中之事)
            && 費禕.謀事(宮中之事)
            && 董允.謀事(宮中之事)) {

        陛下.施行(宮中之事);
        System.out.println("裨補闕病, 有所廣益");
    }

    if (向寵.為臣 == 臣德.賢) {
        System.out.println("性行淑均,曉暢軍事。");
        System.out.print("先帝稱之曰:");
        先帝.曰("能");
        System.out.println("是以眾議舉寵為督。");
    }

    String 營中之事 = null;
    if (陛下.咨之(營中之事)) {
        陛下.施行(宮中之事);
        System.out.println("行陣和睦,優劣得所!");
    }

    君 文景 = new 君();
    君 恆靈 = new 君();
    國 先漢 = new 國();
    國 後漢 = new 國();

    文景.親賢臣遠小人();
    先漢.國運 = 氣候.興隆;
    恆靈.親小人遠賢臣();
    後漢.國運 = 氣候.傾頹;

    do {
        先帝.每與臣論此事();
    } while (先帝.在);

    if (郭攸之.為臣 == 臣德.賢
            && 費禕.為臣 == 臣德.賢
            && 董允.為臣 == 臣德.賢) {
        System.out.println("此悉貞良死節之臣,願陛下親之信之,則漢室之隆,可計日而待也。");
    }

    丞相 諸葛亮 = new 丞相();
    諸葛亮.回首往事();
    諸葛亮.表忠心();
    諸葛亮.請戰();               // 此臣所以報先帝而忠陛下之職分也
    諸葛亮.道別();
}

程式碼輸出《出師表》

出師表部分輸出

創業未半而中道崩殂!
此誠危急存亡之秋也!
侍衛之臣郭攸之不懈於內
侍衛之臣費禕不懈於內
侍衛之臣董允不懈於內
忠志之士向寵忘身於外!
開張聖聽,光先帝遺德!
刑!
賞!
性行淑均,曉暢軍事。
先帝稱之曰:能
是以眾議舉寵為督。
行陣和睦,優劣得所!
嘆息痛恨於桓靈。
臣本布衣,躬耕於南陽,苟全性命於亂世,不求聞達於諸侯。先帝不以臣卑鄙,猥自枉屈,三顧臣於草廬之中,咨臣以當世之事,由是感激,遂許先帝以驅馳。後值顛覆,受任於敗軍之際,奉命於危難之間,爾來二十有一年矣。
先帝知臣謹慎,故臨崩寄臣以大事也。受命以來,夙夜憂嘆,恐託付不效,以傷先帝之明。故五月渡瀘,深入不毛。
今南方已定,兵甲已足,當獎率三軍,北定中原,庶竭駑鈍,攘除奸凶,興復漢室, 還於舊都。
今當遠離, 臨表涕零, 不知所言。
繼續探索

延伸閱讀

更多文章
同標籤 2024/3/14

C#與Java

在動態且不斷演進的軟體開發世界中,Java 和 C# 是兩個巨頭,每個都有自己獨特的優勢、理念和生態系統。本文深入比較了 Java 和 C#,探討了它們的歷史背景、語言特性、效能指標、跨平台功能等。

繼續閱讀