第一次用 JAVA練習寫的程式, 還未學到例外處理的方法, 所以本程式跑起來可能會有當掉的情況, 請多包含囉!! 程式碼內有一些註解, 請參考. (發佈後, 發現程式碼都被向左靠了, 不知如何將程式碼放入才好, 知道的人請教教我, 阿里阿多!!) 程式碼如下 :
程式碼如下 :
======================================================
import java.util.Random;
import javax.swing.JOptionPane;
public class Guess_3 {
   
    /* static 為靜態變數宣告, 可以讓同類別裡的所有方法物件使用  */
   
    static int[] secrete_num = new int[4];
    public static void main(String[] args) {
        String guess, ans;
        int a_cnt = 0, b_cnt = 0;
        boolean play = true, check_digit = true;
        /* 程式自行產生四位數字 */
        get_num();
       
        while (play == true) {
            check_digit = true;
            a_cnt = 0;
            b_cnt = 0;
           
            guess = JOptionPane.showInputDialog("請輸入四個不同的數字(0 - 9)");
       
            /* 檢查輸入值是否合理 */
            while (check_digit == true) {
                check_digit = false;
               
                /* 檢查輸入值長度是否為四個字 */
                if (guess.length() != 4){
                    guess = JOptionPane.showInputDialog("非四位數, 請輸入四個不同的數字(0 - 9)");
                    check_digit = true;
                }
                else {
                    /* 檢查輸入值為 0 ~ 9 */
                    for (int d = 0; d < 4; d++) {
                        if (guess.charAt(d) < '0' || guess.charAt(d) > '9') {
                            guess = JOptionPane.showInputDialog("含有非數字值, 請輸入四個不同的數                                                 字(0 - 9)");
                            check_digit = true;
                            break;
                        }   
                    }
                }
            }
           
            /* 數入值與程式產生的數字做比對 */
            for (int i = 0; i < 4; i++)
                for (int j = 0; j < 4; j++)
                    /* (guess.charAt(j) - '0') 此為將文字數字值轉為 Int 型態 */
                    if (secrete_num[i] == (guess.charAt(j) - '0')) {
                        /* 若數字相同, 則比對位置, 相同則 a 計數加 1, 不相同則 b 計數加 1 */
                        if (i == j)
                            a_cnt++;
                        else
                            b_cnt++;
                    }
           
            /* 若為 4A0B, 則完全猜中, 詢問是否再重新開始 ? */
            if (a_cnt == 4) {
                ans = JOptionPane.showInputDialog("恭喜你完全猜中答案為 :  " + guess
                        + "   再來一次 ?(y/n)");
                if (ans.charAt(0) == 'n')
                    play = false;
                else
                    get_num();
            } else {
                /* 若為 xAxB, 詢問是否繼續猜 ? */
                ans = JOptionPane.showInputDialog(guess + "==>   " + a_cnt
                        + "A" + b_cnt + "B   繼續猜 ? (y/n)");
                if (ans.charAt(0) == 'n')
                    play = false;
            }
        }
    }
    static void get_num() {
       
        /*  Random 為亂數產生器, 可隨機產生一個數字, 如下 : Random.nextInt(n)
         *  表示隨意產生 0 ~ (n-1)的數字 */
        Random random = new Random();
       
        /* 先產生第一個數字*/
        secrete_num[0] = random.nextInt(10);
        /* 接下來產生數字與先前產生的數字做比對, 若相同時, 則重新產生再比對, 直到不相同為止 */
        for (int k = 1; k < 4; k++) {
            secrete_num[k] = random.nextInt(10);
            for (int h = 0; h < k; h++) {
                if (secrete_num[h] == secrete_num[k]) {
                    k--;
                    break;
                }
            }
        }
       
        /* 印出程式產生的數字, 測試比對用, 驗證完成後可以整段 註解不印出 */
        System.out.print("secrete number = ");
        for (int i = 0; i < 4; i++)
            System.out.print(secrete_num[i]);
        System.out.println("");
    }
}
=====================================================
2009年5月29日 星期五
猜數字遊戲的程式設計流程圖與程式碼
訂閱:
張貼留言 (Atom)
0 意見:
張貼留言