[英]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.