Как вывести отсортированные сроки с соответствующей темой? - PullRequest
0 голосов
/ 09 февраля 2019

Я делаю программу, которая позволяет пользователю вводить, сколько у них домашних заданий, предмет, фактическое домашнее задание и сроки.Затем я хочу отсортировать сроки в порядке возрастания, чтобы наименьший срок был на первом месте.Я хочу вывести отсортированные сроки с правильной темой и домашней работой, однако я не знаю, как это сделать.

Я уже заказал сроки и использовал цикл for, чтобы позволить пользователю ввести всеих домашние задания.

  Console.WriteLine("Welcome to my homework organiser. How many pieces of homework do you have?")

    repeats = Console.ReadLine()

    For i = 0 To repeats - 1
        Console.WriteLine("Enter subject " & i + 1)
        subject.Add(Console.ReadLine())
        Console.WriteLine("Enter homework " & i + 1)
        homework.Add(Console.ReadLine())
        Console.WriteLine("how many days until " & subject(i) & "'s homework is due?")
        deadline.Add(Console.ReadLine())
    Next

    deadline.Sort()

    For counter = 0 To deadline.Count - 1
        Console.WriteLine(subject.Item(counter) & ", " & homework.Item(counter) & ", " & deadline.Item(counter) & " days")
    Next

Ответы [ 2 ]

0 голосов
/ 09 февраля 2019

Всего несколько изменений в Very Good answer @ JustShadow

Моё первое изменение - изменить поля классов на Public Property.Классы любят хранить свои данные рядом с жилетом в приватных полях.Они предоставляют свои данные миру через Свойства.Теперь у нас есть автоматические свойства, просто объявив переменную как свойство.Компилятор напишет нам поля Get, Set и Private.Конечно, вы все равно можете записать его, если вам нужен дополнительный код в Get или Set.

Также в классе изменен Deadline на Date.Если бы приложение было расширено, где данные были сохранены и повторно использованы, число не сработало бы, но дата сработала бы.

Далее я бы не стал ограничивать количество добавляемых домашних заданий.Просто добавьте Да / Нет в конце цикла.

Я изменил цикл For на For Each, так как у нас есть IEnumerable.Нет необходимости возвращаться к списку.Я также упростил отображаемый код с помощью интерполированной строки.

Public Class Homework
    Public Property Subject As String
    Public Property Description As String
    Public Property Deadline As Date
End Class
Sub Main()
    Dim allHomeworks As New List(Of Homework)()
    Do
        Dim h As New Homework
        Console.WriteLine("Enter subject ")
        h.Subject = Console.ReadLine()
        Console.WriteLine("Enter description ")
        h.Description = Console.ReadLine()
        Console.WriteLine("Enter Date Due ")
        h.Deadline = CDate(Console.ReadLine())
        ' Add newly created homework to the list
        allHomeworks.Add(h)
        Console.WriteLine("Are you finished? Yes/No")
        If Console.ReadLine.ToLower = "yes" Then Exit Do
    Loop
    Dim sorted = allHomeworks.OrderBy(Function(x) x.Deadline)
    For Each h As Homework In sorted
        Console.WriteLine($"Date Due: {h.Deadline}, Subject: {h.Subject}, Description: {h.Description}")
    Next
    Console.ReadLine()
End Sub
0 голосов
/ 09 февраля 2019

Этого можно добиться с помощью классов и функции List.Sort .

Imports System Imports System.Collections.Generic

Public Class Homework
    Public Subject As String
    Public Text As String
    Public Deadline As Integer
End Class

Public Class Test
    Public Shared Sub Main()
        Dim repeats as Integer = 4
        Dim allHomeworks As New List(Of Homework)()

        For i = 0 To repeats - 1
            Dim homework as New Homework

            System.Console.WriteLine("Enter subject " & i + 1)
            homework.Subject = Console.ReadLine()

            System.Console.WriteLine("Enter homework " & i + 1)
            homework.Text = Console.ReadLine()

            System.Console.WriteLine("how many days until " & homework.Subject & "'s homework is due?")
            homework.Deadline = Console.ReadLine()

            ' Add newly created homework to the list
            allHomeworks.Add(homework)
        Next

        ' Sort the items of the list by "Deadline" property of the class 
        allHomeworks.Sort(Function(x, y) x.Deadline.CompareTo(y.Deadline))

        For counter = 0 To allHomeworks.Count - 1
            Console.WriteLine(allHomeworks(counter).Subject & ", " & allHomeworks(counter).Text & ", " & allHomeworks(counter).Deadline & " days")
        Next
    End Sub
End Class

PS Это просто быстро написанный код.Вы, вероятно, должны переименовать некоторые вещи и приспособиться к логике вашего приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...