2016-03-26 15 views
-1

配列文字列にrandom範囲関数を使用しています。また、私は配列の文字列を繰り返さないためにフィルターを使用していますが、時には最初のランダムな文字列がnilです。ランダム配列文字列がゼロになる

ランダム範囲コード:

func randomNumber(range: Range<Int> = 1...6) -> Int { 
    let min = range.startIndex 
    let max = range.endIndex 
    return Int(arc4random_uniform(UInt32(max - min))) + min 
} 

私はfirstItemからnilを取得しています:

var a = cities[randomNumber(0...80)] 

if Marmara.contains(a){ 
    firstItem = a 
    print(firstItem) //It's getting nil sometimes. 
    var filteredForSecond = Marmara.filter{$0 != firstItem} 
    secondItem = filteredForSecond[randomNumber(0...filteredForSecond.count-1)] 
    print(secondItem) 
    var filteredForThird = Marmara.filter{$0 != secondItem && $0 != firstItem} 
    thirdItem = filteredForThird[randomNumber(0...filteredForThird.count-1)] 
    print(thirdItem) 
    var filteredForFourth = Marmara.filter{$0 != thirdItem && $0 != secondItem && $0 != firstItem} 
    print(fourthItem) 
    fourthItem = filteredForFourth[randomNumber(0...filteredForFourth.count-1)] 
    //sehirler.removeAtIndex(s) 

    print("\(firstItem), \(secondItem), \(thirdItem), \(fourthItem)") 
} 

私はこのコードを使用して、アレイ内の "81" の文字列を持っています。この無限の問題を解決するにはどうすればよいですか?

+1

それがnilである 'cities'配列のエントリを選ぶので、おそらく' A'がnilです。 if文を 'Marmara.contains(a)&& a!= nil'に変更するか、都市全体の配列を初期化したことを確認してください。 – BradzTech

+0

私はあなたの方法を試して空になりました。それはちょうど空になる。それは何も言いませんが、ただ空です。私はそれが無限になっている、それは合格条件ではありません。しかし、それはパスして空になる。私は問題を起こさない:あなたはコードをテストすることができますか? – jorjj

+1

'cities'配列を作成した場所にコードを投稿できますか?または 'print(cities)'の出力。あなたの仕事がうまくいくためには、そのエンジェルは何もないはずです。 – BradzTech

答えて

1

私は少なくとも以下の変更を行います。これで問題が解決するかどうかを確認してください。

var a = cities[randomNumber(0...cities.count-1)] 
+0

私はこの問題を解決しました。このコードは私にとって有益でした。ありがとう。 – jorjj

0

私はこの問題を解決しました。私はそれが無条件かどうかをチェックしています。ランダムな文字列をもう一度取ると、それはもはやゼロにならないのです。ここで

は、作業コードです:

var a = cities[randomNumber(0...cities.count-1)] 

while a.isEmpty{ 
    a = cities[randomNumber(0...cities.count-1)] 
} 

if Marmara.contains(a) && a != ""{ 
    firstItem = a 
    if firstItem.isEmpty{ 
     print("nil") 
    } 
    print(firstItem) 
    var filteredForSecond = Marmara.filter{$0 != firstItem} 
    secondItem = filteredForSecond[randomNumber(0...filteredForSecond.count-1)] 
    print(secondItem) 
    var filteredForThird = Marmara.filter{$0 != secondItem && $0 != firstItem} 
    thirdItem = filteredForThird[randomNumber(0...filteredForThird.count-1)] 
    print(thirdItem) 
    var filteredForFourth = Marmara.filter{$0 != thirdItem && $0 != secondItem && $0 != firstItem} 
    print(fourthItem) 
    fourthItem = filteredForFourth[randomNumber(0...filteredForFourth.count-1)] 
    //sehirler.removeAtIndex(s) 

    print("\(firstItem), \(secondItem), \(thirdItem), \(fourthItem)") 
} 
+1

あなたが解決策を見つけたらうれしいです。ただし、空のエントリが2回選択された場合でも、動作しない可能性があります。 'if a.isEmpty'を' while a.isEmpty'に変更してみてください。空でないものが見つかるまでピッキングを続けます。 – BradzTech

+0

私はあなたの方法でそれを変更し、投稿を編集しました。今はうまくいく。どうもありがとうございます! :) – jorjj

関連する問題