2016-03-26 5 views
1

ルールやランダムなサイズNxNを記入して、各対角線の量を求めて推定します。コメントに記したエラーを理解するのに役立ちます。私は間違って何をしていますか?ありがとうございました!2次元配列のランダムな塗りつぶしと検索要素を作成するNxN Swift

func diagonals (n:Int) -> String{ 
     var sumFirst: Int 
     var sumSecond: Int 

     var multArray = Array(count: n, repeatedValue: Array(count: n, repeatedValue: 0)) 
       print(multArray) //create 2d array NxN with Initialisation 

     for var i in multArray { 
      for var k in multArray { 
       multArray[i][k] = i+k // fill array elements the sum of the indices (error line) or we can fill it random, but how? 
       if i==k { //check element on the main diagonal 
        sumFirst += multArray[i][k] // do sum (error line) 
       } 
       if (i+k) == n { //check element on secondary diagonal (error line) 
        sumSecond += multArray[i][k] // do sum (error line) 
       } 
      } 
     } 

     return "Sum elemets on main diagonal =\(sumFirst) and second =\(sumSecond)" 
    } 

    diagonals(3) 
+0

エラーは、エラーが'言います配列に配列を代入することはできませんので、目的に近づくには[enumerate()メソッド]を使用してください(http://apple.co/25pGSNq )あなたの配列のインデックスも取得し、multArray.enumerate()の 'for(indexI、elementI)'と 'multArray.enumerate()'の 'for(indexK、elementK)'の2番目のインデックスを取得してください。 – ronatory

+0

@あなた、友人!私は訂正し、回答を決定に書いた。 – redisky

+0

あなたも大丈夫ですが、私はあなたの決定のコメントにSulthanのヒントをお勧めします – ronatory

答えて

1

解決済み! K 'は `` i`ため、タイプ「配列 」 `の指標とタイプ「配列<[Int]>」(別名「配列 >」)の値は添字できず:

func diagonals (n:Int) -> String{ 
    var sumFirst = 0 
    var sumSecond = 0 

    var multArray = Array(count: n, repeatedValue: Array(count: n, repeatedValue: 0)) 
      print(multArray) //create 2d array NxN with Initialisation 

    for indexI in multArray.indices { 
     for indexK in multArray.indices { 
      multArray[indexI][indexK] = Int(arc4random_uniform(UInt32(n))) // fill array elements randomly 
      if indexI==indexK { //check element on the main diagonal 
       sumFirst += multArray[indexI][indexK] // do sum 
      } 
      if (indexI+indexK + 1) == n { //check element on secondary diagonal 
       sumSecond += multArray[indexI][indexK] // do sum 
      } 
     } 
    } 
print(multArray) 
    return "Sum elemets on main diagonal =\(sumFirst) and second =\(sumSecond)" 
} 

diagonals(3) 
+1

multArray.enumerate()の '(indexI、_)の代わりに、multArray.indices {'または'' indexArray.indices {'のindexIのメソッド' {' – Sulthan

+0

1)の2つのインデックスを1行でスキャンできますか?たとえば、multArray.indicesの 'for(indexI、indexK){' 2}のメソッドの 'for index in 0 .. redisky

+0

簡単にはできませんが、1つのインデックスに対して繰り返し処理を行い、2つのインデックスに変換できます。 map {($ 0/n、$ 0%n)} 'と同じようなものがあり、その後にはインデックス' {'の' for(row、column)ただし、大きなデータで使用すると、そこでの分割がパフォーマンスに影響することに注意してください。 – Sulthan

関連する問題