2

私がやろうとしているのは、配列で構成される編集可能なカレンダーを作成することです。

まず、いくつかの変数を作成します。

import UIKit

/////////////////////////////////////////////////////////////////////

// Variables

var userName = "String"
var bedTime: Int = 0
var wakeTime: Int = 7
var sleepMonth = "String"
var quantifiedMonth: Int = 1

次に、多次元配列によるカレンダー:

var day0: [Int] = [0]
var day1: [Int] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24]
var day2: [Int] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24]
var day3: [Int] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24]
var day4: [Int] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24]

var month0 = [[0]]
var january = [day0, day1, day2, day3, day4]
var february = [day0, day1, day2, day3, day4]
var march = [day0, day1, day2, day3, day4]
var april = [day0, day1, day2, day3, day4]
var may = [day0, day1, day2, day3, day4]
var june = [day0, day1, day2, day3, day4]
var july = [day0, day1, day2, day3, day4]
var august = [day0, day1, day2, day3, day4]
var september = [day0, day1, day2, day3, day4]
var october = [day0, day1, day2, day3, day4]
var november = [day0, day1, day2, day3, day4]
var december = [day0, day1, day2, day3, day4]

var calendar = [month0, january, february, march, april, may, june, july, august, september, october, december]

次に、ネストされた for ループを使用して、ユーザーが通常眠っているときに言うことができるようにします。

   @IBAction func setVariablesButton(_ sender: UIButton)
    {
        bedTime = Int(bedTimeTextField.text!)!
        wakeTime = Int(wakeTimeTextField.text!)!
        quantifiedMonth = Int(monthToEditTextField.text!)!
        var hourX = bedTime
        var hourZ = wakeTime
        var dayX = 1
        let dayZ = 1
        let lengthMonth = calendar[quantifiedMonth].count

        for _ in 1...lengthMonth // Do the following for as many days
            // as are in the month
        {
            for _ in calendar[1][dayX][hourX]...calendar[1][dayX][24]
            {
                calendar[1][dayX][hourX] = 0 // Loops by amount
                hourX = hourX + 1            // specified 2 lines above
            }

            for _ in calendar[1][dayZ][0]...calendar[1][dayZ][hourZ]
            {
                calendar[1][dayX][hourZ] = 0
                hourZ = hourZ - 1
            }

            dayX = dayX + 1 // Loops by amount specified 8 lines above
        }


        bedTimeLabel.text = "\(calendar[1][1])"
    }

私が建設していたとき、私はいつも持っていました

var quantifiedMonth

0 に設定すると、プログラムが動作するようになります。次に、1に設定すると壊れることに気付きました。プログラムが機能したときに得た出力のため、その理由について頭を悩ませることはできません。

私が持っていたと言う

var quantifiedMonth = 0
bedTime = 20
wakeTime = 7

それから私の出力は

[0, 0, 0, 0, 0, 0, 0, 0, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 0, 0, 0, 0, 0] 

でもいつ

var quantifiedMonth = 1

プログラムがクラッシュします。それがなぜなのか頭を悩ませることはできません。私の考えでは、私が行う出力を得ることができないはずです

var quantifiedMonth = 0

助けてください。丁寧な質問を心掛けておりますが、不明な点がありましたらお知らせください。

これは、表示されるエラー メッセージの 1 つです。

ここに別のものがあります

4

1 に答える 1

0

問題は、内部で宣言する必要がある for ループの外部で変数を宣言していることです。

        var hourX = bedTime
        var hourZ = wakeTime

次のように宣言する必要があります。

    for _ in 1...lengthMonth 
    {
        var hourX = bedTime
        var hourZ = wakeTime

そうしないと、これらの変数が本来あるべきように設定されません。

また、 lengthMonth をに変更する必要があります

let lengthMonth = calendar[quantifiedMonth].count - 1

配列が 0 から始まるときに、for ループを 1 から開始するためです。そうしないと、「インデックスが範囲外です」というエラーが発生します。

于 2016-11-07T19:36:29.100 に答える