iT邦幫忙

0

[JAVA]產生不重複之亂數內的radom及lengh的用法

各位好,我是剛學習JAVA沒多久的生手。
以下是我看到的網站
[JAVA]產生不重複之亂數,網址如下:
https://4xsc.com/java-random/

我的疑問點是圖面中紅線的地方
https://ithelp.ithome.com.tw/upload/images/20171127/20107413ssiujo3Ydo.jpg

random的用法我是知道了,但是為何要打10-i?
以及
for(int j = n; j < num.length - 1; j++)
{
num[j] = num[j+1];
}
這一段的length為何要-1?

這個我研究了快一個晚上還是想不出來,只好請各位大大幫忙解答。
感謝!

1 個回答

0
fysh711426
iT邦研究生 4 級 ‧ 2017-11-27 13:39:24
最佳解答

程式運行:

初值

num 1 2 3 4 5 6 7 8 9 10
arr 0 0 0 0 0

random n = 5

num 1 2 3 4 5 7 8 9 10 10
arr 6 0 0 0 0

random n = 5

num 1 2 3 4 5 8 9 10 10 10
arr 6 7 0 0 0

random n = 3

num 1 2 3 5 8 9 10 10 10 10
arr 6 7 4 0 0

10-i 是因為要讓每次取 num 陣列的範圍變小,
以上面結果來說明,可以理解成不要取重複 10 的部分。

num.length - 1 是因為在把 num 往前移動時,如果不減一,j 在最尾端時 num[j+1] 就會超出陣列範圍。

看更多先前的回應...收起先前的回應...
froce iT邦大師 5 級 ‧ 2017-11-27 15:47:32 檢舉

實做上java有list,可以把元素取出,這樣會比較直觀。

froce iT邦大師 5 級 ‧ 2017-11-27 15:52:13 檢舉

然後在python只要這樣就行了,我是來亂的。

import random
print(random.sample(range(10), 5))
fysh711426 iT邦研究生 4 級 ‧ 2017-11-27 20:17:42 檢舉

沒錯,這篇有點再寫 C++ 的感覺,一切都很原始 XD

tajo1127 iT邦新手 5 級 ‧ 2017-11-29 06:23:57 檢舉

force:
Java用list是這個方法嗎?
這網頁內的Collection移出法:
http://puremonkey2010.blogspot.tw/2012/11/java-java_26.html

python能夠用這一段達成亂數取值不重複?!
好簡潔有力!

tajo1127 iT邦新手 5 級 ‧ 2017-11-29 06:25:19 檢舉

fysh711426:
所以這個邏輯是從C++來的嗎?

fysh711426 iT邦研究生 4 級 ‧ 2017-11-29 08:41:47 檢舉

哈哈,不是這麼說,
是以前在學 C++ 時很多東西都要自己做,很原始,
寫 JAVA 和 C# 後就很少用到陣列,
會用其他資料結構替代,例如 force 大大說的 list,
當然 C++ 也有類似的東西 STL,只是以前剛學習,沒有碰到這些。

我要發表回答

立即登入回答