2016-03-18 32 views
0

Bu işlevi çağırdığımda doğru ve yanlış dizinler oluşturmayı test ettim ve yalnızca ikinci if deyiminin sorunlara neden olduğunu anladım. Ne yapılacağından emin değilim, çünkü her iki ifadenin de bu kadar benzer olması sorunu bulamıyorum. Değişikliği değiştirmek için ikinci if ifadesini sıfırladım. Yalnızca bir numaraya, işe yaramadı, ya da sadece bir WordCharacters.count yöntemine döndüm ... lütfen yardım edin!Neden "hatalı yönerge" hatası alıyorum?

// to define a custom index, and asign it a new custom position 

func rearangeALetter(aWord: String, var changeThis: Int, var withThis: Int) -> (codedWord:String, fromTo: String) { 
    let aWordCharacters: [Character] = wordSeperator(aWord) 
    let changeCharacter: Character = aWordCharacters[changeThis] 
    var finalWord: [Character] = aWordCharacters 

    finalWord.removeAtIndex(changeThis) 

    if withThis > aWordCharacters.count { 
     withThis = 0 
    } 

    if changeThis > finalWord.count { 
     changeThis = aWordCharacters.count 
    } 

    finalWord.insert(changeCharacter, atIndex: withThis) 

    let returnWord = combineWords(finalWord) 

    return (returnWord, "Letter number \(changeThis + 1) has been switched with letter number \(withThis + 1)") 
} 

rearangeALetter("Hello", changeThis: 101, withThis: 100) 

cevap

0

Dizideki geçerli dizin aralığı 0 ile 1 arasında, 0'dan başlayarak değil.

if changeThis > finalWord.count { 
    changeThis = aWordCharacters.count - 1 
} 

ama söyledikten, sana başarmak istediğiniz şeyi gerçekten emin değilim, bu yüzden Yemin olmaz: Ben eğer ikinci değiştirmeye gerek. Aslında diziye endekslemek için changeThis kullanmadığınızdan, aslında bir kilitlenme düzeltecek gibi görünmüyor.

func rearangeALetter(aWord: String, var changeThis: Int, var withThis: Int) -> (codedWord:String, fromTo: String) { 
    let aWordCharacters: [Character] = wordSeperator(aWord) 

    if changeThis > finalWord.count { 
     changeThis = aWordCharacters.count 
    } 

    let changeCharacter: Character = aWordCharacters[changeThis] 
    var finalWord: [Character] = aWordCharacters 

    finalWord.removeAtIndex(changeThis) 

    if withThis > aWordCharacters.count { 
     withThis = 0 
    } 

    finalWord.insert(changeCharacter, atIndex: withThis) 

    let returnWord = combineWords(finalWord) 

    return (returnWord, "Letter number \(changeThis + 1) has been switched with letter number \(withThis + 1)") 
} 
+0

bu çok yardımcı olur bu yüzden acemiyim, Çok teşekkür ederim: Eğer endeks kullanmadan önce

Ah, ayrıca sınırları çekleri (her iki ifadeleri ise) yapmak gerekir. Bilgimi süratle test etmek için ipleri manipüle eden fonksiyonlar yapıyorum. Bu başka önerileri akla getirirse, tekrar çok teşekkür ederim! – KeithFrazier98

İlgili konular