2014-06-10 3 views
0

사실이 아닌 가장 큰 번호를 찾으려면 아래 코드를 사용하려고 시도합니다. 그러나, 가장 큰 숫자 앞에 참 변수가 오는 경우, 그 숫자보다 더 작은 숫자를 줄 것을 원합니다. 어떻게 이것을 달성하기 위해 코드를 바꿀 수 있습니까? 제대로 일 1 UPDATE에 작은 동일한 경우다음 진실을 찾으려면 배열을 사용한 명령문을 사용하십시오.

var firstRow = [1: false, 2: false, 3: false, 4: false, 5: true, 6: false] 
var smallest = Int.max 
var largest = 0 
var playerLoc = "3" 

for (number, bool) in firstRow { 
if playerLoc != "1" && playerLoc != "30"{ 
    if bool == false && number < smallest { 
     smallest = number 
     var smallString = ("\(smallest)") 
     if smallString == playerLoc { 
      smallest = Int.max 

     } 
     else { 
      smallest = number 

     } 
    } 
} 
else { 
    smallest = Int.max 
} 
if playerLoc != "6" && playerLoc != "36" { 

    if bool == false && number > largest { 
     largest = number 
    } 
} 
else { 
    largest = 0 
} 

} 
println(smallest) 
println(largest) 

그래서 예를 들어,이 코드는 4 가장 큰 동등한를 설정합니다 : 범위의 오류 배열 인덱스 아웃이 코드 줄을 사용 내가 얻을

var firstRow = [(1, false), (2, false), (3, false), (4, false), (5, false), (6, false)] 

그러나 놀이터에서 사용하면 정상적으로 작동합니다.

나는이 코드로 문제를 좁혔다.

if two.contains(player.position) || two.contains(opponent.position) ||  two.contains(block3.position) { 
    firstRow[2].1 = true 
} else { 
    firstRow[2].1 = false 
} 
+1

사전은 정렬되지 않은 콜렉션입니까? firstRow의 항목이 반드시 순서대로 반복되지는 않습니다. –

+0

나는 그것을 몰랐다. 대신에 무엇을 권하고 싶습니까? – Nas5296

+0

튜플 배열 :'var a = Array <(Int, Bool)>()' –

답변

0

주문이 중요한 경우 사전 대신 배열을 사용해야합니다.

var firstRow = [(1, false), (2, false), (3, false), (4, false), (5, true), (6, false)] 

그럼 당신은 이런 식으로 반복 할 수

for var i = 0; i < firstRow.count; ++i){ 
    if (firstRow[i].1){ 
     if (i == 0){ 
      // handle this condition 
     } else { 
      smallest = firstRow[i-1].0 
      break 
     } 
    } 
} 
+0

정말 고마워요! – Nas5296

+0

실제로 나는 2 개의 trues가 연속적으로있는 경우에 둘 다 돌려 보낼 것이라는 점을 것을을 발견했다. 매우 첫 번째를 반환 할 때 멈추고 싶습니다 – Nas5296

+0

'break'를 사용하여 제 편집 참조 –

0

내가 그것을 알아 냈어. 배열로 전환했을 때 1 대신 0에서 시작 했으므로 6을 호출하면 오류가 발생했습니다. 그래서 저는 0에서 시작하여 5로 가야만했습니다.

관련 문제