close

一、先來教個新技巧:把小數無條件捨去及四捨五入
j1.JPG
圖片參考:http://programming.im.ncnu.edu.tw/J_index.html
常用的 int範圍是整數,要小數的話,就用float或double,而double的範圍是實數
以下是把小數無條件捨去的方法:

    public static void main(String[] args)
    {
        int x;double y =3.14159;
        x = (int)(y);
        System.out.println(x);
    }

用括弧框住特定指令,即可獲得特定值的特定部分

j2.JPG

若要改成四捨五入:

    public static void main(String[] args)
    {
        int x;double y =3.666;
        x = (int)(y
+0.5);
        System.out.println(x);
    }

加0.5即可XD
 
j3.JPG


二、產生亂數Math.random
範圍:0<=Math.random<1

    public static void main(String[] args)
    {
        for(int i=1;i<11;i++)
        {
        System.out.println(Math.random());
        }
    }

j4.JPG
此為模擬的亂數(蒙地卡羅亂數),連用兩次會產生不同的亂數

三、製作物件,mylib.Rand/0~n和m~n的隨機整數

令R'=(int)(Math.random())
0<=R'<1
0<=R'*(n+1)<(n+1) ...同乘n+1
0<=R'*(n+1)<=n ...變號
這樣R'*(n+1)就是一個[0,n]的隨機整數了

    static int Rand(int n)
    {return((int)(Math.random()*(n+1)));}

j1.JPG

j2.JPG

0<=R'<1
0<=R'*(n-m+1)<(n-m+1) ...同乘(n-m+1)
0<=R'*(n-m+1)<=n-m ...變號
m<=R'*(n-m+1)+m<=n-m+m ...同加m
m<=R'*(n-m+1)+m<=n
放回Java就是:(int)(Math.random()*(n-m+1)+m);

    static int Rand(int m,int n)
    {return(Rand(n-m+1)+m);}

 

j1.JPG

j2.JPG

關於隨機整數的詳細圖文推導點此( ゚∀゚)つ≡≡≡♡♡♡)`ν゜)グシャ

四、隨機六個不重複的數字(猜樂透)

P1.png

j1.JPG

    public static void main(String[] a)
    {
        int x,y,z=0;int []m=new int[6];

        m[0]=mylib.Rand(1,49);//第一個數字
        for(x=1;x<=5;x++)//第2~6的字
        {            
            m[x]=mylib.Rand(1,49);
            z=0
;//先假設while false不用再做一次,一次就成功
            do
            {
                for(y=0;y<x;y++)
                {
                    m[y]=mylib.Rand(1,49);
//同一個m陣列,重複叫出前面幾格的數字
                    if(m[x]==m[y])//檢測(比較)有沒有相同(若數字與之前的相同就跳出)                        
                    {            //表示這個字不能選用
                        z=1;break;
                    }
                }                
            }while(z==1);
//如果z==1就再執行一次
        }
        for(x=0;x<=5;x++)
        {
        System.out.print(m[x]+" ");
        }
    }

五、猜數字雛形
j3.JPG

J2.JPG

可改進空間:

1、布林運算的檢定可以用!直接取代

2、應該要顯示猜過的數字,縮小範圍並顯示出來

3、最後顯示"恭喜猜中"一般是放在最後面,以增加效能

六、最終版20170327s2
    public static void main(String[] args)
    {    
        int n,m1=1,m2=1000;int ans=mylib.Rand(m1,m2);        
        do
        {    
            n=Integer.parseInt(mylib.Input(
m1+"~"+m2+"猜個數字:"));
            if(n>ans){
m2=n;}
            else if(n<ans){
m1=n;}                
        }while(
n!=ans);
        System.out.println("You win~lalalala:)");
    }

jj1.JPG

可改善空間:

1、用try-catch限制只能輸入數字

2、當範圍越來越小,限制不能輸入範圍以外的數字(比如現在是400~550之間,應禁止輸入<400及>550);Bug:可以輸入>-1和>1000,範圍會跟著變大

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 Kuihao 的頭像
    Kuihao

    溫暖午後的金針田__孕育有趣的創新

    Kuihao 發表在 痞客邦 留言(1) 人氣()