2009-01-21

JVD01FLEX 樂透程式 - 使用 FLEX-AS3 實作 JAVA 應用程式

今天大掃除找到以前學 JAVA 的書
裡面有很多題目
所以就想說把他的題目用 FLEX-AS3 來實作
不過前面當然是很簡單囉~
如果有朋友自學或是剛入門的也可以看看囉~@@

希望不會後面太難 然後我自己寫不出來了 哈~~

本文章同時發表於 http://gjo4rul4.blogspot.com

第一彈 JVD01FLEX 樂透程式 - 使用 FLEX-AS3 實作 JAVA 應用程式 

題目敘述:
請使用 MATH 或 RANDOM 類別所提供的亂數函數及陣列來設計一模擬樂透彩開獎的程式
程式執行後會產生 6 個號碼以及 1 個特別號

1.每次執行程式皆會亂數產生 6 個號碼及 1 個特別號
2.號碼之間不可重複出現
3.所有號碼介於 01 ~ 42 之間
4.個位數號碼顯示時請漁號碼前加入 "0" 例如 7 要顯示 07

評分項目
每次執行程式皆會亂數產生 6 個號碼及 1 個特別號 - 4
號碼之間不可重複出現 - 4
所有號碼介於 01 ~ 42 之間 - 4
個位數號碼顯示時請於號碼前加入 "0" 如 7 要顯示 07 - 3

總分 15

Author: 山羊
URL: http://gjo4rul4.blogspot.com

by Author :

這個實作的程式 我寫了兩個方法
通常一般寫程式的初學者應該會用方法2
先取出亂數並且判斷陣列中是否重複
雖然這個範例中差異並不會很大
但是如果在 1000 個亂數中要取出 800 個 (或更大的數字)
兩者的效能就會以方法一較有效率

方法1 -> 1000次寫入陣列 800次產生亂數
方法2 -> 800次寫入陣列 800次(以上)產生亂數

-------------以下為程式碼------------


<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" fontSize="14">

<mx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
/*
題目敘述:
請使用 MATH 或 RANDOM 類別所提供的亂數函數及陣列來設計一模擬樂透彩開獎的程式
程式執行後會產生 6 個號碼以及 1 個特別號

1.每次執行程式皆會亂數產生 6 個號碼及 1 個特別號
2.號碼之間不可重複出現
3.所有號碼介於 01 ~ 42 之間
4.個位數號碼顯示時請漁號碼前加入 "0" 例如 7 要顯示 07

評分項目
每次執行程式皆會亂數產生 6 個號碼及 1 個特別號 - 4
號碼之間不可重複出現 - 4
所有號碼介於 01 ~ 42 之間 - 4
個位數號碼顯示時請於號碼前加入 "0" 如 7 要顯示 07 - 3

總分 15

Author: 山羊
URL: http://gjo4rul4.blogspot.com

by Author :

這個實作的程式 我寫了兩個方法
通常一般寫程式的初學者應該會用方法2
先取出亂數並且判斷陣列中是否重複
雖然這個範例中差異並不會很大
但是如果在 1000 個亂數中要取出 800 個 (或更大的數字)
兩者的效能就會以方法一較有效率

方法1 -> 1000次寫入陣列 800次產生亂數
方法2 -> 800次寫入陣列 800次(以上)產生亂數


*/

//方法1
private function clickHandler1():void{
//清空印出區域
this.printOutArea.text = "";
//建立集合物件
var arc:ArrayCollection = new ArrayCollection();
//執行 42 次的迴圈 >> 將 42 個數字依序塞入集合物件
for(var i:int=1;i<=42;i++){
//如果 數字 小於 10 的話必須在 數字前面加上 0
if(i<10){
//將數字 "塞入" 集合物件
arc.addItem("0"+i);
}else{
//將數字 "塞入" 集合物件
arc.addItem(i);
}
}
//用亂數取出 6 個號碼
//執行 6 次迴圈
for(var j:int=0;j<6;j++){
//先取出 亂數*集合物件的長度
var number:int = Math.floor(Math.random()*arc.length);
//將集合物件的第 x 個物件取出並印在打印區 x 代表剛剛取出的亂數 ( 但不會超過集合物件的長度 )
this.printOutArea.text = this.printOutArea.text + "第 " + (j+1) + " 個號碼 : "+ arc.getItemAt(number) + "\n";
//將抽到的號碼從集合物件移除
arc.removeItemAt(number);
}
//再抽出最後一個號碼 為特別號 , 這個就不用再移除物件了 因為已經結束了
this.printOutArea.text = this.printOutArea.text + "特別號 : "+ arc.getItemAt(Math.floor(Math.random()*arc.length)) + "\n";

}
//方法2
private function clickHandler2():void{
//清空印出區域
this.printOutArea.text = "";
//建立陣列
var array:Array = new Array();
//陣列必須要有 7 個數字才停止運算
while(array.length < 7){
//建立亂數 1~42 中取 1
var number:int = Math.floor(Math.random()*42)+1;
//數字是否重覆旗標
var hasNumber:Boolean = false;
//逐次比對陣列內所有的數字
for(var i:int=0;i<array.length;i++){
//如果發現陣列已經有得到的亂數就把重複旗標設定為 true
if(number == array[i]){
hasNumber = true;
}
}
//如果沒有發現重複的數值 塞入亂數
if(!hasNumber){
array.push(number);
}

}
//取出依序取出前六個號碼
for(var j:int=1;j<=6;j++){
//如果小於 10 就在 數字前面 + 上 0
if(array[j-1]<10){
this.printOutArea.text = this.printOutArea.text + "第 " + j + " 個號碼 : "+ "0"+array[j-1] + "\n";
}else{
this.printOutArea.text = this.printOutArea.text + "第 " + j + " 個號碼 : "+ array[j-1] + "\n";
}

}
//取出特別號
//如果小於 10 就在 數字前面 + 上 0
if(array[6]<10){
this.printOutArea.text = this.printOutArea.text + "特別號 : "+ "0"+array[6] + "\n";
}else{
this.printOutArea.text = this.printOutArea.text + "特別號 : "+ array[6] + "\n";
}

}

]]>
</mx:Script>
<!--建立三個 FLEX 物件-->
<mx:Text text="JAVA 實力評量 JVD01 使用 FLEX 實作 &#xa;&#xa;模擬樂透彩 (易)&#xa;&#xa;程式執行號產生六個號碼以及一個特別號"/>
<mx:TextArea width="800" height="400" id="printOutArea"/>
<mx:Button label="執行 方法 1" click="clickHandler1()"/>
<mx:Button label="執行 方法 2" click="clickHandler2()"/>
</mx:Application>


沒有留言: