字串輸入 問題


2015-11-27_104423.jpg


小弟剛接觸LabVIEW沒多久,目前在撰寫一個簡易猜數字遊戲,輸入端部分我採用字串輸入,後續再跟所產生的亂數做比較分析,目前進度已到  只能輸入 四位值數字,但是小弟我遇到一個問題無法克服,如何篩選重複輸入的數字,例如 1233、1555、2222, 像這類所輸入的數字如何解決???

本來有想土法煉鋼法,每個數字分別作等於比較,可是覺得這樣太累贅,請問各位前輩有無更好方法 或是其他撰寫法,能夠限定"只能輸入一組四位值且不重複之數字"…
Cdg0play42335.4529513889


如果只有基本的猜數字0~9,並且你有四位數,希望做四位數全不重複的檢驗
建議進行4位「數值」陣列與「數字類別」陣列的轉換。
看起來很簡單,該觀念卻是資料處理中踏入柱狀圖解析(Histogram Analysis)的開始。

下面的做法注重程式的擴展性,舉例是用在4位數的10進位猜數字。你高興的話甚至可以用在6位數的16進位猜數字。
數字類別陣列:
資料:開一個10個元素的整數(或布林)陣列[0]~[9],起始值皆為0。
[0]、[1]、...、[9]
累計0被用了幾次、累計1被用了幾次、...、累計0被用了幾次。

迴圈:跑你的位數圈數,如果你有4位數,則迴圈跑4輪,每次除以10,取出餘數使用。當然了,迴圈的移位暫存器把商傳向下一輪迴圈。

運算:由於此餘數必定為0~9之間,if此餘數i為3,則利用Index Array取出[3]之數值,數值+1後,用Replace Array Subset灌回[3]。紀錄3被多用了一次。
(你也可以用In Place Element Structure替代完成上面的步驟。)

1.如果是進行柱狀圖分析,則做完後依據數字類別陣列,你就可以觀察每個數值用多少次了。
2.如果你只是要判斷數字已經使用了,那麼檢測到使用次數非零,就可以停止檢測,增進程式效率。
3.為什麼會稍微提到擴展性?因為你的進位方式(例如10進位、16進位、8進位)通常是選定的,也就是這個「數字類別」陣列的陣列長就是固定的。
當你玩的是10進位的4位數猜數字,還是開陣列長10。
當你玩的是10進位的6位數猜數字,還是開陣列長10。
當你玩的是10進位的8位數猜數字,還是開陣列長10。而且沒多久就可以通過檢測陣列,半途就發現已經有數值被使用第二次了。
如果用捉對廝殺的方法8*7*(1/2),其實有可能會更快結束,甚至於不需要開出這個固定長度的計數陣列,但是柱狀分析對於程式後續人工智慧的開發卻會很有幫助。

拋磚引玉,LabVIEW裡面應該還有更符合你需求的做法。


[QUOTE=Cdg0play]
2015-11-27_104423.jpg

小弟剛接觸LabVIEW沒多久,目前在撰寫一個簡易猜數字遊戲,輸入端部分我採用字串輸入,後續再跟所產生的亂數做比較分析,目前進度已到  只能輸入 四位值數字,但是小弟我遇到一個問題無法克服,如何篩選重複輸入的數字,例如 1233、1555、2222, 像這類所輸入的數字如何解決?????

本來有想土法煉鋼法,每個數字分別作等於比較,可是覺得這樣太累贅,請問各位前輩有無更好方法 或是其他撰寫法,能夠限定"只能輸入一組四位值且不重複之數字"....
[/QUOTE]MingYen42338.717650463

感謝 <span =“bold” style=“-sizing: border-;”>MingYen大 提供的方法。<span =“bold” style=“-sizing: border-; text-decoration: none; font-size: 12px; line-height: 18px; background-image: initial; background-attachment: initial; background-size: initial; background-origin: initial; background-clip: initial; background-: 0px 0px; background-repeat: initial;”>


目前採用較簡易作法,由於是字串輸入的關係,利用 Search and Replace String Function功能 與所輸入的的字串(四位數字) 作比較,
用 字串(0123456789)與輸入的字串(???)作比較,如果string size輸出不等於6 代表有數字重複 ,即可達到簡易過濾效果。 

喔喔好辦法,學到一招好用的啦
感謝~~ 

[QUOTE=Cdg0play]感謝 MingYen大 提供的方法。

目前採用較簡易作法,由於是字串輸入的關係,利用 Search and Replace String Function功能 與所輸入的的字串(四位數字) 作比較,
用 字串(0123456789)與輸入的字串(????)作比較,如果string size輸出不等於6 代表有數字重複 ,即可達到簡易過濾效果。 

[/QUOTE]