Ввода 10 чисел в массив


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

Imports System

Public Module Module1

Public Sub Main()
    Dim score(10) as decimal
    Console.WriteLine("Enter the score")
    score(0) = Console.ReadLine
    Console.WriteLine("Enter the score")
    score(1) = Console.ReadLine
    Console.WriteLine("Enter the score")
    score(2) = Console.ReadLine
    Console.WriteLine("Enter the score")
    score(3) = Console.ReadLine
    Console.WriteLine("Enter the score")
    score(4) = Console.ReadLine
    Console.WriteLine("Enter the score")
    score(5) = Console.ReadLine
    Console.WriteLine("Enter the score")
    score(6) = Console.ReadLine
    Console.WriteLine("Enter the score")
    score(7) = Console.ReadLine
    Console.WriteLine("Enter the score")
    score(8) = Console.ReadLine
    Console.WriteLine("Enter the score")
    score(9) = Console.ReadLine
    Console.WriteLine(score(0) + score(1) + score(2) + score(3) + score(4) + score(5) + score(6) + score(7) + score(8) + score(9))

End Sub


144
5
задан 8 апреля 2018 в 05:04 Источник Поделиться
Комментарии
2 ответа

Повторения. Всегда знак, что что-то можно улучшить. Dry (не повторяй себя) здесь мантры.

Магия Чисел. Сносно для одноразового кода, но может мешать, если вы хотите сохранить или продлить код.

Я буду иметь дело с магией чисел первой (и вы увидите, почему, когда я обращаюсь повторение)

У вас есть Dim score(10) as decimal где нет никаких реальных оснований для 10 кроме того, что это хороший номер. Мы можем исправить это (может показаться на первый взгляд лишним, но это хорошая привычка) следующие:

Const numOfInputs as Long = 10 ' You can always call it what you like, but make it sensible and descriptive
Dim score(numOfInputs) as decimal

Теперь, если вы хотели работать с 12 числа, вы только должны изменить назначение numOfInputs. У вас есть два направления повторения. Решение основных блока:

For iterator as Long = 0 to numOfInputs - 1 ' 0 based array.
Console.WriteLine("Enter the score (input number " & iterator & ")")
score(iterator) = Console.ReadLine
Next iterator

Посмотрим, как мне удалось "настроить" строке строку! Теперь, если вы хотите сделать что-то еще, вы только должны исправить после того, как код, а не в десять раз.

Выступая на выход. Есть несколько способов сделать это. Одна из них-создать еще один цикл, цикл через массив, а затем использовать выходной. Но у нас уже есть точно такой же цикл, который мы будем использовать, чтобы добавить их все.

Const numOfInputs as Long = 10 ' You can always call it what you like, but make it sensible and descriptive
Dim score(numOfInputs) as decimal
Dim finalCount as decimal = 0 'OK, the default value is 0 but I like to be explicit
For iterator as Long = 0 to numOfInputs - 1 ' 0 based array.
Console.WriteLine("Enter the score (input number " & iterator & ")")
score(iterator) = Console.ReadLine
finalCount += score(iterator) ' simply add up the items as we go along.
Next iterator

Как видите, я сейчас поставлю на место finalCount так что мы можем добавить, как мы идем вместе - что бы я делала, если у меня в отдельной петли в любом случае.

Ох, и теперь вы можете распечатать его с помощью Console.WriteLine(finalCount).

Ключевые уроки


  1. Петли, а не повторять. Гораздо легче поддерживать

  2. Повторное использование петель, где вы можете - это намного эффективнее. Подумай о своей логике программы, так что вы можете быть эффективным с петель.

  3. Заменить магические числа переменных (констант), которые определены где-то логично. Гораздо легче заменить хорошо именованную константу только один раз, чем пытаться найти, что 10 и тогда получается, если что нужно изменить, чтобы 12 или если это действительно 10.

4
ответ дан 8 апреля 2018 в 06:04 Источник Поделиться

Когда вы объявляете массив в VB.NET количество вы представить последний показатель можно получить доступ.

Так линия

Dim score(10) as decimal

означает, что score действительно имеет 11 цифр в нем. Это одно из многих различий между C# и VB.NET.

Впустую пространство не огромное, но писать цикл score.Length даст неожиданные результаты, когда вы получите дополнительный элемент, который вы не знали.

Вот еще немного информации о массивах в VB.NET:

https://docs.microsoft.com/en-us/dotnet/visual-basic/programming-guide/language-features/arrays/

1
ответ дан 21 апреля 2018 в 09:04 Источник Поделиться