2012-09-30 2 views
0

제가 는 I는 다음과 같은 방법으로 임의의 번호를 선택할 0-9에 인덱스에서 정수 값을 저장하는 배열을 가지고, 지금동안 스칼라 루프

val r = new scala.util.Random 
var a=r.nextInt(10) 

을 경우에 인덱스 a의 값 배열이 10이면 다른 난수를 선택해야합니다. 는 그래서 arr[random number generated] 동안 우리는 숫자를 원하기 때문에 우리는 난수를 생성 유지, 10입니다 arr[random nnumber]!=10

그래서, 같은 코드를 작성할 때 : 그것은 무한 루프에 무슨 일

while(arr2(a)==10) 
    a=r.nextInt(10) 

합니다. 그러나 코드를 다음과 같이 작성하면

if(arr2(a)==10) 
    while(arr2(a)==10) 
    a=r.nextInt(10) 

이 잘 작동합니다. 왜 이런 일이 일어나는 걸까요? 귀하의 경우에 아마도

+2

것은 당신이 우리에게 줄 수 설명하는 동작을 재현하는 완전한 실행 가능한 코드 샘플? – sepp2k

+0

마지막으로 선택한 솔루션이 무엇이든 관계없이 배열에 값 10 만 포함되어 있지 않은지 확인하거나 수행 시도 횟수의 상한을 설정하십시오. –

답변

1

코드 아래 한 줄이 도움이 될 것입니다 :

util.Random.shuffle(arr.zipWithIndex).find(_._1 != 10) 

반환 아래 나를 위해 작동 상태와

Option[(Int, Int)] // (value, index) where value non 10 

코드 :

scala> val arr = 1 :: List.fill(9)(10) 
arr: List[Int] = List(1, 10, 10, 10, 10, 10, 10, 10, 10, 10) 

scala> var idx = util.Random.nextInt(10) 
idx: Int = 9 

scala> while(arr(idx) == 10) { 
    | idx = util.Random.nextInt(10) 
    | } 

scala> idx 
res1: Int = 0 
관련 문제