2012年8月5日 星期日

homework

一樣引用老師 Release 的 "Homework"跟"字串切割"。

花了今天一些時間到補習班實作,僅供參考@@"
package org.randy.MentalTest;

import javax.swing.*;

public class MentalQuiz {

    public static void main(String[] args) {
        String[][] quiz = {{"1.經常對雙親採取反抗的態度 (y/n) ?", "2", "5"},
            {"2.能沉著地和討厭的人說話 (y/n) ?", "3", "5"},
            {"3.不會拒絕別人的請求 (y/n) ?", "4", "6"},
            {"4.周圍的人說你生氣時很恐怖 (y/n) ?", "8", "7"},
            {"5.曾經認真考慮過要自殺 (y/n) ?", "9", "10"},
            {"6.想嘗試如野獸般的sex (y/n) ?", "10", "8"},
            {"7.因為個性很衝,所以常常與人發生口角 (y/n) ?", "8", "6"},
            {"8.你的內心比外表還要狂野 (y/n) ?", "12", "11"},
            {"9.最近的人際關係經常失和 (y/n) ?", "12", "13"},
            {"10.能若無其事地說謊 (y/n) ?", "13", "14"},
            {"11.經常會累積煩惱 (y/n) ?", "15", "10"},
            {"12.對人的喜好很強烈 (y/n) ?", "15", "16"},
            {"13.會帶頭說人壞話 (y/n) ?", "17", "14"},
            {"14.經常有兩極化的言行 (y/n) ?", "19", "17"},
            {"15.認為女性的價值絕對是由容貌來決定 (y/n) ?", "18", "20"},
            {"16.會勃然大怒至忘我境界 (y/n) ?", "19", "20"},
            {"17.容易得意忘形 (y/n) ?", "18", "21"},
            {"18.過去一年都是同一髮型 (y/n) ?", "22", "21"},
            {"19.曾情緒性的大聲嘶吼 (y/n) ?", "23", "22"},
            {"20.不太會和沒利害關係的人來往 (y/n) ?", "24", "19"},
            {"21.很容易讓人對你發牢騷 (y/n) ?", "25", "22"},
            {"22.很會向年長的異性撒嬌 (y/n) ?", "26", "23"},
            {"23.在家裡和在外面的個性截然不同 (y/n) ?", "28", "26"},
            {"24.經常讓人說是慢郎中 (y/n) ?", "28", "27"},
            {"25.會裝開心果逗大家開心 (y/n) ?", "29", "30"}, //A, B
            {"26.曾讓自己比外表看起來更美麗 (y/n) ?", "30", "31"}, //B, C
            {"27.在任何場所都能感動流淚 (y/n) ?", "32", "26"}, //D
            {"28.脾氣相當彆扭 (y/n) ?", "32", "33"}, //D, E
            {"A類型 追求自然的誠實派\n\n你最討厭掩飾,覺得誠實最好,當然雙重人格程度也最低。可是這並不表示你只會說真話,有時你也懂得某些狀況要裝傻。你在人際關係上有裝乖寶寶的強烈傾向,就連和真正討厭的人相處也能和喜歡的朋友般沒差別,不過這點恐怕會惹人嫌,被認為「表裡不一」或「裝好人」。", "", ""},
            {"B類型 非得說真話的頑固者\n\n你的個性是只說真心話,完全不在乎發言會激怒周遭或造成恐慌,只要能表達意見就會感到滿足。粗線條的你雖沒發覺,但周遭已把你列入「不受歡迎」的黑名單。你多半不是為了傷人才惡言相向,但完全無惡意反而才更難處理;說話不思考會被孤立唷,不過你也許一輩子都不會發現。", "", ""},
            {"C類型 不停變換假面具的牆頭草\n\n與其說是雙重人格不如說你八面玲瓏。你會因人改變態度,有著見人說人話及欺弱扶強的狡猾之處。你對待有利用價值的人會和藹可親,反之則冷酷無情,是周圍常見的牆頭草的類型。曾在合適時機適當發言是特徵之一,或許會被人批評「沒原則」,偶爾要貫徹自己想法以免失去信賴。", "", ""},
            {"D類型 標準的雙重人格\n\n你是道地的雙重人格。雖平常愛流淚、會照顧人,有耐心傾聽周圍煩惱,但一激動起來會張惶失措至連旁人都無法處理的地步,出現令人無法置信的大轉變。不過因為你自己有自覺,所以還不算是病態!平常很老實,可是偶而也會做出想不到的大膽行為,總之轉變極端是你的特徵。", "", ""},
            {"E類型 靈活運用的處世能手\n\n你是處世的能手,有能力與人相處愉快,雙重人格度屬一般水平。除非必要否則不與人爭執,常保持中立立場,一切有分寸,但並非是沈默老實,而是瞭解樹大招風的道理。即使朋友興致勃勃說某人壞話也絕不加入,但這不表示袒護對方。如果是女性,這樣的態度會被同性誤認為「狡猾」。", "", ""}
        };

        int num = 1;

        while (num <= quiz.length - 5) {
            //呼叫第一題的題目,並把return的值賦值給變數yesNo。
            int yesNo = JOptionPane.showConfirmDialog(null, quiz[num-1][0]);
            //依照yesNo來判斷下一個要顯示的題目。
            //showConfirmDialog的return值為0表"是"
            if (yesNo == 0) {
                num = Integer.parseInt(quiz[num-1][1]);
            }
            //showConfirmDialog的return值為1表"否"
            if (yesNo == 1) {
                num = Integer.parseInt(quiz[num-1][2]);
            }
            //showConfirmDialog的return值為2表"取消",-1表右上角的"X"。
            if (yesNo == 2 || yesNo == -1) {
                JOptionPane.showMessageDialog(null, "Bye bye~");
                //離開loop,至loop的下一行開始執行。
                break;
            }
        }
        //宣告變數a儲存for的loop次數。
        int a = 0;
        //宣告字串NewString儲存換行後的字串。
        String NewString = "";
        
        //用split把原本字串裡本身就有的\n\n刪除,並賦值給字串陣列cutString。
        String[] cutString = quiz[num - 1][0].split("\n\n");
        //用substring還傳自訂的子字串並加上\n給NewString。
        /*為了不讓最後一次loop超出cutString[1].length()的range,
         * 所以扣掉自訂的長度。
         */
        for (int i = 0; i < (cutString[1].length() - 20); i += 20, ++a) {
            NewString += (cutString[1].substring(i, i + 20) + "\n");
        }
        //彌補最後一次loop沒有做而損失的字串。
        NewString += (cutString[1].substring((20 * a), cutString[1].length()));
        //印出。
        JOptionPane.showMessageDialog(null, cutString[0] + "\n\n" + NewString);
    }
}
最後切割字串的那段code,如果有人有更好的方法請讓我知道,我想要精進,謝謝ORZ...

P.S. 但前提是不能改變原本字串的任何東西。

沒有留言:

張貼留言