最近在學習資料庫設計,讓我想起以前工作上碰到的一件鮮事,有一位老外來台灣留學, 對於中文一知半解, 在學校填寫學生基本資料表時,監護人填的是他在台灣的一位女性朋友名字, 關係這個欄位卻填上 " 未發生" ,這讓資料輸入員不知如何是好, 因為關係欄沒這選項, orz.
2009年5月30日 星期六
2009年5月29日 星期五
猜數字遊戲的程式設計流程圖與程式碼
第一次用 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("");
}
}
=====================================================