2016-12-29 124 views
0

我的代碼存在問題,我試圖做一個簡單的戰爭遊戲應用程序,在開始時一切正常,但在10-20點擊按鈕隨機化新卡片後我得到錯誤:UIImage錯誤:索引超出範圍

fatal error: Index out of range

我知道的變量名是不正確的,但我來自英國沒有,所以我很快鍵入它們和英語單詞與波蘭gramar:d,karty意味着卡)

import UIKit 

class ViewController: UIViewController { 

    @IBOutlet weak var LeftCardOutlet: UIImageView! 
    @IBOutlet weak var RightcardOutlet: UIImageView! 
    @IBOutlet weak var LeftScoreOutlet: UILabel! 
    @IBOutlet weak var RightscoreOutlet: UILabel! 

    var karty = ["card2","card3","card4","card5","card6","card7","card8","card9","card10","jack","queen","king"] 

    var scoreplayer:Int=0 
    var CPUscore:Int=0 
    override func viewDidLoad() { 
     super.viewDidLoad() 

    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 

    } 
    @IBAction func DealClicked(_ sender: UIButton) { 
     var random1:Int = 0 
     var random2:Int = 0 
     random1 = Int(arc4random_uniform(UInt32(12))) 
     random2 = Int(arc4random_uniform(UInt32(12))) 
     var im1=UIImage(named:"\(karty[random1+1])") 
     var im2=UIImage(named: "\(karty[random2+1])") 
     LeftCardOutlet.image=im1 
     RightcardOutlet.image=im2 
     if random1>random2 { 
      scoreplayer+=1 
      LeftScoreOutlet.text=String(scoreplayer) 
     } 
     if random1<random2 { 
      CPUscore+=1 
      RightscoreOutlet.text=String(CPUscore) 
     } 
    } 

} 

我在這一行中有錯誤:

var im2=UIImage (named: "\ (karty[random2+1])") 

,我在斯威夫特是新的,它的我的第三,他們所以請理解:)

+1

*不要*加1到隨機數,數組索引從*零開始* –

+0

即時通訊如此愚蠢.....我必須從「karty [random2 + 1」中刪除「+1」:D –

+0

另請參見[從數組中挑選一個隨機元素](http://stackoverflow.com/questions/24003191/pick-a-random-element-from-an-array)。 –

回答

0

在幾乎所有的編程語言,隨機數生成器返回一個數> = 0和<(嚴格小於)論據。

所以Int(arc4random_uniform(UInt32(12)))返回0到11(含)之間的數字。

另外,在幾乎所有的編程語言中,數組的元素的索引都是從第一個元素的0開始。因此,這將解決您的代碼:

var im1=UIImage(named:"\(karty[random1])") 
var im2=UIImage(named:"\(karty[random2])") 

一旦你有你的代碼的工作,你可以去我們的姊妹網站Code Review,要求改進。

+0

感謝您的評論,但我自己解決:),我會檢查該頁面 –