#vb.net #while-loop
#vb.net #во время цикла
Вопрос:
Итак, для моего класса я пытаюсь написать код, который суммирует числа от 1 до 10. Например, если пользователь введет 3, эта программа добавит 1 2 3 и окончательный ответ был бы 6…….Я пытаюсь сделать это с помощью цикла, а также с помощью отображения, которое дает ответ.
это код, который у меня есть до сих пор……..
Option Strict On
Public Class frmSumOfNumbers
Private Sub btnEnterNumbers_Click(sender As Object, e As EventArgs) Handles btnEnterNumbers.Click
'For loop from 0 to counter -1
InputBox("Enter A Positive integer value", "Input needed", "10")
End Sub
Function Validation(ByVal PositiveNumber As Double, ByRef Result As Double) As Boolean
If PositiveNumber > -1 Then
Result = CDbl(PositiveNumber)
Else
'pop message box and return false if not positive
MessageBox.Show("Please enter positive numbers only")
Return False
End If
End Function
Private Sub btnExit_Click(sender As Object, e As EventArgs) Handles btnExit.Click
' Closes the program
Close()
End Sub
End Class
Комментарии:
1. В чем ваш вопрос?
2. Вы не считываете значение, возвращаемое
InputBox
.PositiveNumber
иResult
появляются из ниоткуда. Цикла нет.
Ответ №1:
Ваша первая проблема заключается в предоставлении места для сбора входных значений от пользователя. Взгляните на функцию InputBox https://learn.microsoft.com/en-us/dotnet/api/microsoft.visualbasic.interaction.inputbox?view=netframework-4.8
Обратите внимание, что возвращает строку. Мы можем получить входные данные от пользователя, предоставив строковую переменную.
Dim UserInput As String
UserInput = InputBox("Enter A Positive integer value", "Input needed", "10")
Но это значение исчезнет, как только мы достигнем End Sub! Если мы используем переменную уровня формы для сбора значений, переменная будет существовать до тех пор, пока форма открыта. Другим преимуществом переменной уровня формы (уровня класса) является то, что она может быть отображена любым методом из.
Мы можем использовать переменную коллекции, такую как массив или список. Поскольку мы не уверены, сколько чисел введет пользователь, давайте использовать список. С массивом нам пришлось бы использовать ReDim Preserve каждый раз, когда мы получали новое число для изменения размера массива. Это не обязательно для списка. Смотрите https://learn.microsoft.com/en-us/dotnet/api/system.collections.generic.list-1?view=netcore-3.1
На уровне формы…
Private IntegerList as New List(Of Integer)
Но у нас есть строковая переменная от пользователя. Здесь появляется ваш код проверки. Нам нужно передать то, что пользователь ввел в поле ввода (помните, что InputBox возвращает строку), поэтому тип данных аргумента в строке. Мы хотим вернуть целое число, чтобы тип данных функции был целым. За любым оператором возврата в функции должно следовать целое значение.
Я использовал целое число.Попробуйте проанализировать, было ли введенное число числом, а затем я проверил, является ли число положительным. Смотрите документы https://learn.microsoft.com/en-us/dotnet/api/system.int32.tryparse?view=netcore-3.1
Если пользовательский ввод проходит проверку, то число добавляется в список, в противном случае отображается сообщение.
Чтобы сложить список, вы можете .Net framework выполняет цикл за кулисами с помощью .Метод суммы списка или вы можете использовать для каждого цикла, чтобы сделать это самостоятельно. Тот же результат.
Private IntegerList As New List(Of Integer)
Private Sub AddANumber_Click(sender As Object, e As EventArgs) Handles AddANumber.Click
Dim UserInput = InputBox("Enter A Positive integer value", "Input needed", "10")
Dim RetVal = Validation(UserInput)
If RetVal > -1 Then
IntegerList.Add(RetVal)
Else
MessageBox.Show("Please enter positive numbers only")
End If
End Sub
Function Validation(ByVal UserInput As String) As Integer
Dim ReturnInteger As Integer
If Integer.TryParse(UserInput, ReturnInteger) AndAlso ReturnInteger > -1 Then
Return ReturnInteger
Else
Return -1
End If
End Function
Private Sub DisplayTotal_Click(sender As Object, e As EventArgs) Handles DisplayTotal.Click
Dim Total = IntegerList.Sum
MessageBox.Show($"The Total is {Total}")
Dim LoopTotal As Integer
For Each i In IntegerList
LoopTotal = i
Next
MessageBox.Show($"The LoopTotal is {LoopTotal}")
End Sub
Примечание: Строки, которым предшествует символ $, называются интерполированными строками. Вы можете выполнить поиск по этому термину, чтобы узнать, как они работают.