Не могу решить задачу на go
Задача:
Напишите структура Note (сущность заметок, у которых в отличие от задач нет чётких дедлайнов и приоритета):
1. title - заголовок (тип string)
2. text - текст заметок (тип string)
Создайте структуру ToDoList с такими полями:
1. name - название списка (тип string)
2. tasks - список дел на сегодня (тип слайс структур Task (из предыдущего задания))
3. notes - список дополнительных заметок (тип слайс структур Note)
Для этой структуры реализуйте методы TasksCount и NotesCount, которые возвращают общее количество задач и заметок соответственно.
Также реализуйте метод CountTopPrioritiesTasks, который возвращает количество приоритетных задач. А также метод CountOverdueTasks, который возвращает количество просроченных задач.
Сама структура Task и все её методы из предыдущего задания также должны быть реализованы в этом.
(На условие про предыдущую задачу, не обращайте внимания. Суть не в этом.)
Мой код:
package main
import "time"
type Note struct {
title string
text string
}
var sum1, sum2 int
type Task struct {
summary string
description string
deadline time.Time
priority int
}
type ToDoList struct {
name string
tasks []Task
notes []Note
}
func (t ToDoList) TasksCount() {
for i := range t.tasks {
i++
sum1 = i
}
return sum1
}
func (d ToDoList) NotesCount() {
for j := range d.notes {
j++
sum2 = j
}
return sum2
}
Где ошибка???
Методы TasksCount() и NotesCount() не объявляют возвращаемый тип, хотя должны возвращать int. Использование глобальных переменных sum1 и sum2 не рекомендуется, это может привести к проблемам при параллельном выполнении. Логика подсчета в циклах неверная - нет необходимости использовать счетчик, так как len() даст нужное количество элементов. Отсутствуют методы CountTopPrioritiesTasks() и CountOverdueTasks().
Исправленный код:
package main
import "time"
type Note struct {
title string
text string
}
type Task struct {
summary string
description string
deadline time.Time
priority int
}
type ToDoList struct {
name string
tasks []Task
notes []Note
}
// Возвращает общее количество задач
func (t ToDoList) TasksCount() int {
return len(t.tasks)
}
// Возвращает общее количество заметок
func (t ToDoList) NotesCount() int {
return len(t.notes)
}
// Возвращает количество приоритетных задач (priority > 2)
func (t ToDoList) CountTopPrioritiesTasks() int {
count := 0
for _, task := range t.tasks {
if task.priority > 2 {
count++
}
}
return count
}
// Возвращает количество просроченных задач
func (t ToDoList) CountOverdueTasks() int {
count := 0
now := time.Now()
for _, task := range t.tasks {
if task.deadline.Before(now) {
count++
}
}
return count
}
Методы можно использовать так:
todoList := ToDoList{
name: "Мой список дел",
tasks: []Task{...},
notes: []Note{...},
}
taskCount := todoList.TasksCount()
noteCount := todoList.NotesCount()
priorityCount := todoList.CountTopPrioritiesTasks()
overdueCount := todoList.CountOverdueTasks()
i++
sum1 = i
это что?
может sum1 += j, вы же сумму считаете
На
package main
import "time"
type Task struct {
Title, Description string
DueDate time.Time
Priority int
IsCompleted bool
}
func (t *Task) IsOverdue() bool { return !t.IsCompleted && time.Now().After(t.DueDate) }
func (t *Task) IsHighPriority() bool { return t.Priority >= 8 }
type Note struct {
Title, Text string
}
type ToDoList struct {
Name string
Tasks []Task
Notes []Note
}
func (tdl *ToDoList) TasksCount() int { return len(tdl.Tasks) }
func (tdl *ToDoList) NotesCount() int { return len(tdl.Notes) }
func (tdl *ToDoList) CountTopPrioritiesTasks() (count int) {
for _, t := range tdl.Tasks {
if t.IsHighPriority() {
count++
}
}
return
}
func (tdl *ToDoList) CountOverdueTasks() (count int) {
for _, t := range tdl.Tasks {
if t.IsOverdue() {
count++
}
}
return
}