2016-12-20 4 views
1

Swiftとプログラミング全般で非常に新しいので、どこに問題があるかわかりません。既存のトピックで答えを見つけようとしました - できませんでした。前もって感謝します。致命的なエラー:インデックスが範囲外です(アレイ)

func smartAssigning(names: [String], statuses: [Bool], projects: [Int], tasks: [Int]) -> String { 
    //beginig 
    var collect: [Int] = [], nameLast = 0 
    var candidateNumber: [Int] = [] 
    for x in 0...statuses.count { 

     //Defines who is working 
     if statuses[x] == false { 
      collect.append(x) 
     } else {} 
    } 

    // Checks for min tasks assigned among those not on vacation 
    let rt: Int = tasks.min()! 
    let rp: Int = projects.min()! 
    for i in collect { 
     if tasks[i] == rt { 
      candidateNumber.append(i) 
     } else {} 
    } 
    // if there is only 1 with min tasks - returns his number in array 
    if candidateNumber.count == 1 { 
     nameLast = candidateNumber[0] 
    } else { 
     // checks for min projects 
     for e in candidateNumber { 
      if projects[e] == rp { 
       nameLast = e 
      } 
     } 
    } 
    return names[nameLast] 
} 
smartAssigning(names: ["sd", "dfsd","dfsdf"], statuses: [true, false, false], projects: [2, 1, 1], tasks: [3, 2, 1]) 

画面:

Screen

+1

最初のエラーが0でxの 'である... statuses.count'-あなたは*デバッグ*しようとしました:

for x in statuses.indices { // Error is here //Defines who is working if !statuses[x] { collect.append(x) } } 

この全体のコードは、単一のfilter(_:)式を使用して書き込むことができます問題?この機能をシングルステッピングすると、すぐに問題が明らかになります。 –

+0

名前、ステータス、プロジェクト、およびタスク配列の要素はすべて結ばれていますか?例えば。最初の名前は最初のステータス、最初のプロジェクト、最初のタスクに結びついていますか? – Alexander

+0

はい、そうです。しかし私は私の問題を発見した。あなたとMartin R. Damnに感謝します。とても簡単。なぜXCODEはそれをエラーとして認識しないのですか? –

答えて

0

エラーはここにある:

for x in 0...statuses.count { // Error is here 

    //Defines who is working 
    if statuses[x] == false { 
     collect.append(x) 
    } else {} 
} 

statuses.countnであれば、最大インデックスはn-1です。それは0..<statuses.countである必要があります。このような範囲が手動で作成されるのは避けるべきです。 for x in status.indicesを実行するほうがずっと良いです。サイドノートでは

、あなたはそれが何もしない場合else句を持っている必要はありません。

また、むしろ偽(== false)と比較するよりも、単にBoolを否定。

// TODO: Give me a new meaningful name! 
let collect = statues.enumerated() // Get index, status pairs 
        .filter{ index, status in !status } // filter all false statuses 
        .map{ index, status in index } // Take just the indices 
+0

Thx。最初のエラーは見つかりましたか? XCODEでは動作しているようですが、CODECHALLENGEウィンドウには表示したくありません。 { ^ ~~~~)タスク場合種類の値 '[INT]' はメンバー '分' を有していない[I] == tasks.min(~~~:行15:24でfile.swift:エラーは言います –

+0

私はあなたが何を言っているのか分かりません。 o.0' – Alexander

+0

https://www.dropbox.com/s/kruv2n1zj0vmxvt/Screenshot%202016-12-20%2016.18.41.png?dl=0 –

関連する問題