首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当迭代多维数组时,for循环为什么会中断?

当迭代多维数组时,for循环为什么会中断?
EN

Stack Overflow用户
提问于 2016-11-06 00:41:18
回答 1查看 40关注 0票数 2

我要做的是创建一个由数组组成的可编辑日历。

首先,我创建了一些变量:

代码语言:javascript
运行
复制
import UIKit

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

// Variables

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

然后是通过多维数组的日历:

代码语言:javascript
运行
复制
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-循环来允许用户在他们通常睡着的时候说:

代码语言:javascript
运行
复制
   @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])"
    }

当我在建筑时,我总是

代码语言:javascript
运行
复制
var quantifiedMonth

设置为0,这允许程序工作。然后我意识到如果我把它设为1,它就坏了。我不知道为什么,因为我得到的输出,当程序工作。

说我有

代码语言:javascript
运行
复制
var quantifiedMonth = 0
bedTime = 20
wakeTime = 7

那么我的输出就是

代码语言:javascript
运行
复制
[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] 

但是什么时候

代码语言:javascript
运行
复制
var quantifiedMonth = 1

程序崩溃了。我想不出这是为什么。在我看来,我不应该得到我做的输出

代码语言:javascript
运行
复制
var quantifiedMonth = 0

请帮帮忙。我试着彻底地回答我的问题,但如果我对某件事含糊不清,请告诉我。

这是我收到的错误信息之一。

这是另一个

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-07 19:36:29

问题是,您在for-循环之外声明变量,应该在其内部声明变量。

代码语言:javascript
运行
复制
        var hourX = bedTime
        var hourZ = wakeTime

应声明如下:

代码语言:javascript
运行
复制
    for _ in 1...lengthMonth 
    {
        var hourX = bedTime
        var hourZ = wakeTime

否则,这些变量将不会像它们应该设置的那样被设置。

您还需要将lengthMonth更改为

代码语言:javascript
运行
复制
let lengthMonth = calendar[quantifiedMonth].count - 1

因为从1开始开始for循环,当数组从0开始时。否则,您将得到一个“索引超出范围”错误。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40444843

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档