就是愛分享
這個猜數字程式
我是將數字逐一核對
相同位置的就是A,不同位置的數字也就是B

當一寫出來之後就開始想"亂數不重複"的程式
連今天下課休息時間都在想 ~.~

這個"亂數不重複"的小程式
我是將產生的亂數逐一數字檢查
如果有重複的再產生一次直到都沒重複為止

import javax.swing.JOptionPane;

public class NumGuess {

public static void main(String[] args) {

int i;
String s1;
boolean hasGuess = true;
boolean jude;
// 產生亂數不重複的數字
do {
jude = false;
i =(int)((Math.random()*10000)+1);
s1=String.valueOf(i);
if (s1.length() == 4){
for (int m=0;m<3;m++)
for (int n=m+1;n<4;n++){
if (s1.charAt(m) == s1.charAt(n)){
jude = true;
break;
}
}
}else jude = true;
}while (jude);

// 開始猜數字
while(hasGuess){
int a=0,b=0;
String c1 = JOptionPane.showInputDialog("請輸入4個 0-9"+
"不重複的數字:");
for (int x=0;x<4;x++)
for (int y=0;y<4;y++){
if ( s1.charAt(x) == c1.charAt(y)){
if (x == y) a++;
else b++;
}
}

if (a == 4){
hasGuess = false;
JOptionPane.showMessageDialog(null,"恭喜您猜對了!");
}else JOptionPane.showMessageDialog(null,a + "A "
+ b + "B");
}
}
}


不過用Math.random()有個缺點
雖然我有乘上10000產生四位數的整數
但還是會有極少極少的機率會產生三位數的整數!!
所以有加入一個判斷式來檢查若沒有產生四位數時再做一次

此外湯老師有給我一隻"亂數不重複"的小程式
有用到Collections、Vector的觀念
為了尊重湯老師的版權
(老師時常有告戒我們要做個有禮貌的程式設計師 ^^)
如果有需要的同學可以私密給我
標籤: | edit post
0 Responses