簡體   English   中英

Swift function 返回錯誤 output

[英]Swift function returning wrong output

我創建了一個 function 打印學生在哪里 - 課,長時間休息或短暫休息(以及哪個短暫休息)

Function參數為:

    shortBreak - duration of short break
    longBreak - duration of long break
    lesson - after which lesson is long break
    time - the time where students are located

我測試 function 的參數是

   currently(shortBreak: 5, longBreak: 15, lesson: 3, time: "10:37)

所以應該是

  8:00 - 8:45 - lesson
  8:45 - 8:50 - short break
  8:50 - 9:35 - lesson
  9:35 - 9:40 - short break
  9:40 - 10:25 - lesson
  10:25 - 10:40 - long break (after 3.lesson is long break)
  

這意味着學生們目前正在長時間休息,但我的 output 說他們正在上課。

我再次查看了代碼,但我找不到我錯的地方。

另外,有沒有更好的方法來操縱時間參數?

import UIKit

enum current {

case lesson
case shortBreak
case longBreak

}

func currently(shortBreak: Int, longBreak: Int, lesson: Int, time:String){

    var shortBreakCounter: Int = 0
    var currentLesson: Int = 1
    var currentHours: Int = 8
    var currentMinute: Int = 0
    var currentCase: current = .lesson


    let minute: Int = Int(time.suffix(2)) ?? 0
    let hour: Int = Int(time.prefix(2)) ?? 0

    if(checkValid(hour: hour, minute: minute)){
    
        print("Invalid time")
    }

    else {
  
        while isInRange(hour: currentHours, minute: currentMinute) {
    
            currentCase = .lesson
    
            currentMinute += 45
    
            if currentMinute >= 60 {
                currentHours += 1
                currentMinute = 0
            }
    
            if currentLesson == lesson {
            
                currentCase = .longBreak
            
                currentMinute += longBreak
            
                if currentMinute >= 60 {
                    currentHours += 1
                    currentMinute = 0
                }
            
            } else{
              
                currentCase = .shortBreak
            
                currentMinute += shortBreak
            
                shortBreakCounter += 1
            
                if currentMinute >= 60 {
                    currentHours += 1
                    currentMinute = 0
                }
            
            }
        
            currentLesson += 1
    
        }

        switch currentCase {
    
            case .shortBreak:
                print("Students are on \(shortBreakCounter) short break")
            case .longBreak:
                print("Students are on long break")
            default:
                print("Students are on lesson")
            }
  
    }

}

func checkValid(hour: Int, minute:Int) -> Bool {

    if hour >= 16 || hour < 8 {
    
        return true
    
    } else if minute > 59 || minute < 0 {
     
        return true
    }

    return false

}

func isInRange(hour: Int, minute: Int) -> Bool{

    if 8..<16 ~= hour &&  0..<60 ~= minute  {
    
        return false

    }

        return true

    }

    currently(shortBreak: 5, longBreak: 15, lesson: 3, time: "10:37")
if currentMinute >= 60 {
    currentHours += 1
    currentMinute = 0
}

這是錯誤的,您應該將currentMinute設置為當前值 - 60。

想象一下,如果值為 75,則有 15 分鍾過去了,因為您將其設置為 0。

它應該是

if currentMinute >= 60 {
    currentHours += 1
    currentMinute = currentMinute - 60
}

如果 checkValid 為真,isInRange 總是返回假。 您總是得到默認的 currentCase(課程)。

“編輯時間參數”的更好方法是使用日期。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM