2016-03-26 8 views
1

Kurallarını veya rastgele boyut NxN'yi doldurmaya çalışan, daha sonra her bir köşedeki parantezleri araştıran ve onu çıkaran bir dizi sayı yaratıyorum. Yorumlarda belirttiğim hataları anlamaya yardımcı olun. Neyi yanlış yapıyorum? Teşekkür ederim!2d dizisi üzerinde rastgele doldurma ve arama öğesi oluşturun 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

hata hatası' diyor "multArray" öğenizdeki 'elementler -> (diziler)', böylece Int'e bir dizi atayamazsınız, hedefinize yaklaşmak için [enumerate() yöntemini kullanın] (http://apple.co/25pGSNq) dizininizin indekslerini de bunun için multArray.enumerate() 'da (indexI, elementI) için ve ayrıca multArray.enumerate()' – ronatory

+0

@ sen dostum! Kararda kararı düzelttim ve yazdım. – redisky

+0

kabul edersiniz, ama aynı zamanda Sulthan'ın ipucunu da kararınızın yorumunda belirtmenizi öneririm – ronatory

cevap

1

Çözüldü! k` olan `I`` Çünkü türü 'Dizi ' `indeksi ile türü 'Dizi <[Int]>' (aka 'Dizisi >') değeri indis edemez ve:

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() 'içinde' (indexI, _) yerine sadece multArray.indices {'dizininde indexI kullanmak istersiniz sadece '' endeks için '' dır .. Sulthan

+0

1) multArray.indices dizininde indexI için {' bir satırda iki endeksi tarayabilir miyim? Örneğin, '' indeks için '' metodu 'için multArray.indices {' 2' 'deki' '(indexI, indexK)' için. redisky

+0

Kolay değil ama bir dizinin üzerinde yineleyebilir ve iki dizine dönüştürebilirsiniz. Endeksler = (0 .. <(n * n)) haritasına benzer bir şey. {{$ 0/n, $ 0% n)} ve sonra {'için indeksleri (satır, sütun). Ancak, büyük veri ile kullanıldığında bölümün performansı etkileyeceğini unutmayın. – Sulthan