App Inventor學習記錄72,隨機取 A清單的不重複項目,加入到 B清單的 3種方法

這一次要介紹的是隨機清單,隨機按鈕,隨機圖片等等等的作法。這些作法基本上就是取全部清單中,不重覆的隨機項次,來加入到一個新清單中,再用這個新的清單來顯示在畫面的最前面。

記錄一下:
App Inventor學習記錄72,隨機取 A清單的不重複項目,加入到 B清單的三種方法


方法肯定是不止 3種,這裡介紹的是我常用的 3種方式。

同樣會做一個簡單的範例如下,主清單就是從 1~9的數字,設定好要取幾個隨機值之後,再按下方法 1、2、3按鈕,就會用 3種不同的方法,去從主清單中選擇不重覆的隨機值來產生一個新的清單,並且顯示在左側的標籤上。


畫面的配置如下:

除了要設定取幾個隨機值的地方,是放文字輸入盒之外,其它的部份,基本上就是一個標籤配一個按鈕的組合。


全部的程式碼如下:


A清單的程式碼如下:

我們建立一個叫全部的數字變數,它的值是一個清單,清單的內容就是 1~9的數字。
當顯示 A清單按鈕被按下之後:
把原本的清單這個標籤的文字,設定成全部的數字這個變數。


第 1種方法的第 1部份說明:

建立一個叫方法 1取得的清單的變數,它的預設值是一個空清單。
建立一個叫方法1隨機值的變數,它的預設值是空白。


第 1種方法的第 2部份說明:

按鈕方法1按鈕被按下的時候:
把變數方法 1取得的清單,設定成空清單。每按一次按鈕都先清單一次,再產生新的值。

接著,我們用滿足條件和清單長度來做判斷
方法 1取得的清單的長度,小於文字輸入盒 1的數字的時候,那麼就進行下面的程式。
用最前面這個圖來當例子,當我們的方法 1取得的清單的內容是 [1,4,6]的時候,那麼它的長度就是 3,很明顯的小於我們設定的 6,所以就會進行下面的程式,一直到方法 1取得的清單的長度,不小於 6為止。

當滿足方法 1取清的清單的長度,小於文字輸入盒 1的數字這個條件的時候,要進行下面的程式
方法 1隨機值,設定為 0~9中的隨機值。
加入一個流程判斷式,判斷方法 1隨機值,有沒有在方法 1取得的清單
如果沒有的話,就把 方法 1的隨機值,加到方法 1取得的清單中。

同樣舉個例,程式是這樣跑的。
第 1次,方法 1的隨機值取到的值是 1,因為方法 1取得的清單是空清單,所以 1不在方法 1取得的清單中,所以就把它加進去方法 1取得的清單中,所以我們現在的方法 1取得的清單的內容是 [1], 它的長度是 1。

第 2次,方法 1的隨機值取到的值是 4,它也不在方法 1取得的清單中,所以就把它加進去方法 1取得的清單中,所以我們現在的方法 1取得的清單的內容是 [1,4], 它的長度是 2。

第 3次,方法 1的隨機值取到的值是 6,它也不在方法 1取得的清單中,所以就把它加進去方法 1取得的清單中,所以我們現在的方法 1取得的清單的內容是 [1,4,6], 它的長度是 3。

第 4次,方法 1的隨機值取到的值是又是 4,但是它已經在方法 1取得的清單,所以就不動作,所以我們現在的方法 1取得的清單的內容是 [1,4,6], 它的長度是還是 3。

第 5次,第 6次,第 7次,不管它取了幾次,都會一直重覆這個動作,一直到方法 1取得的清單的長度等於 6為止。以這個的例子,就是 [1,4,6,9,8,0]。

最後再把隨機值取得方法 1這個標籤的文字,設定成方法 1取得的清單。那麼畫面上看到的就是 [1,4,6,9,8,0]。

這次是用數字在取,這部份我很常用到,所以放在最前面講。


第 2種方法的第 1部份說明:

建立一個叫方法 2取得的清單的變數,它的值是一個空清單。
建立一個叫方法 2的暫存清單的變數,它的值是一個空清單。
建立一個叫方法 2隨機值的變數,它的值是空白。


第 2種方法的第 2部份說明:

按鈕方法2按鈕被按下的時候:
變數方法 2取得的清單,設定成空清單。每按一次按鈕都先清單一次,再產生新的值。
變數方法 2的暫存清單,設定成複製全部的數字這個清單

加入一個執行次數的方塊,這裡同樣參考最上面的那一張圖,所以這裡的文字輸入.文字的值就是 6。
這裡的意思是說,當數字為 1的時候,做下面的程式,當數字為 2的時候,做下面的程式,總共做 6次。

要執行的程式如下:
數字等於1的時候:
方法 2的隨機值,設定成方法 2的暫存清單中的隨機項。假設這個值為 1。
那麼,就把 1這個值加入到方法 2取得的清單中,所以現在方法 2取得的清單的內容是 [1]。
接著把方法 2的暫存清單中的第 1項給刪除,因為我們用求對像在清單中的位置,已經找出 1是位於方法 2的暫存清單中的第 1項。

也就是說,方法 2的暫存清單原本的值是 [1,2,3,4,5,6,7,8,9],1位於這個清單中的第 1項,所以刪除後的方法 2的暫存清單的內容就會變成 [2,3,4,5,6,7,8,9]。

數字等於 2的時候
方法 2的隨機值,設定成方法 2的暫存清單中的隨機項。假設這個值為 5。
那麼,就把 5這個值加入到方法 2取得的清單中,所以現在方法 2取得的清單的內容是 [1,5]。
接著把方法 2的暫存清單中的第 4項給刪除,因為我們用求對像在清單中的位置,已經找出 5是位於方法 2的暫存清單中的第 4項。

也就是說,方法 2的暫存清單原本的值是 [2,3,4,5,6,7,8,9],5位於這個清單中的第 4項,所以刪除後的方法 2的暫存清單的內容就會變成 [2,3,4,6,7,8,9]。

數字等於 3的時候:
方法 2的隨機值,設定成方法 2的暫存清單中的隨機項。假設這個值為 2。
那麼,就把 2這個值加入到方法 2取得的清單中,所以現在方法 2取得的清單的內容是 [1,5,2]。
接著把方法 2的暫存清單中的第 1項給刪除,因為我們用求對像在清單中的位置,已經找出 2是位於方法 2的暫存清單中的第 1項。

也就是說,方法 2的暫存清單原本的值是 [2,3,4,6,7,8,9],2位於這個清單中的第 1項,所以刪除後的方法 2的暫存清單的內容就會變成 [3,4,6,7,8,9]。

數字等於 4的時候:
方法 2的隨機值,設定成方法 2的暫存清單中的隨機項。假設這個值為 3。
那麼,就把 3這個值加入到方法 2取得的清單中,所以現在方法 2取得的清單的內容是 [1,5,2,3]。
接著把方法 2的暫存清單中的第 1項給刪除,因為我們用求對像在清單中的位置,已經找出 3是位於方法 2的暫存清單中的第 1項。

也就是說,方法 2的暫存清單原本的值是 [3,4,6,7,8,9],3位於這個清單中的第 1項,所以刪除後的方法 2的暫存清單的內容就會變成 [4,6,7,8,9]。

數字等於 5的時候:
方法 2的隨機值,設定成方法 2的暫存清單中的隨機項。假設這個值為 6。
那麼,就把 6這個值加入到方法 2取得的清單中,所以現在方法 2取得的清單的內容是 [1,5,2,3,6]。
接著把方法 2的暫存清單中的第 2項給刪除,因為我們用求對像在清單中的位置,已經找出 6是位於方法 2的暫存清單中的第 2項。

也就是說,方法 2的暫存清單原本的值是 [4,6,7,8,9],6位於這個清單中的第 2項,所以刪除後的方法 2的暫存清單的內容就會變成 [4,7,8,9]。

數字等於 6的時候:
方法 2的隨機值,設定成方法 2的暫存清單中的隨機項。假設這個值為 8。
那麼,就把 8這個值加入到方法 2取得的清單中,所以現在方法 2取得的清單的內容是 [1,5,2,3,6,8]。
接著把方法 2的暫存清單中的第 3項給刪除,因為我們用求對像在清單中的位置,已經找出 8是位於方法 2的暫存清單中的第 3項。

也就是說,方法 2的暫存清單原本的值是 [4,6,7,8,9],8位於這個清單中的第 3項,所以刪除後的方法 2的暫存清單的內容就會變成 [4,7,9]。

寫了很長一串,我已經盡力把它講的明白,希望我下次再看的時候能把它編輯的更好一些。
總之,現在我們的方法 2取得的清單的內容是 [1,5,2,3,6,8],方法 2的暫存清單的內容是 [4,7,9],這個做法是建一個暫存清單,每加入一個值,就把那個值從暫存清單中刪除,這樣下次在選的時候,就不會取到重覆的值。


第 3種方法的程式碼如下:

這個部份我就不額外說明了,就是把前面這兩種混搭使用。
這三種方法,就可以達成一樣的效果,我自己在用的時候,都不一定用那一種,有的時候是忘了可以這樣寫,有的時候是忘了可以那樣寫。干脆就整理在一塊,以後有需要的時候,就直接拿來用,不用在想一次。

這次的 aia檔的下載連結如下:
點我下載 NO_72_Random_from_other_list.aia

參考書籍如下:
手機應用程式設計超簡單 App Inventor 2零基礎入門班
TQC+ 創意App程式設計認證指南
TQC+創意App程式設計認證指南解題秘笈
手機應用程式設計超簡單:App Inventor 2初學特訓班
手機應用程式設計超簡單:App Inventor 2小專題特訓班
手機應用程式設計超簡單:App Inventor 2資料庫專題特訓班

之前介紹過的一些 appinventor的使用記錄,都整理在下面這個頁面上了。
APP INVENTOR學習記錄及資源整理頁面

發表迴響