【问题标题】:How to add and convert text to double from a textbox to an array?如何将文本从文本框添加到数组并将其转换为双精度?
【发布时间】:2019-09-21 22:53:05
【问题描述】:

我正在尝试为一个简单的计算器编写代码,该计算器将在一个数组中存储多达 10 个结果。

我的计算器部分工作正常,但在存储和显示数组结果时遇到问题。

Public Class wk2_David_Thieme_vb
Inherits System.Web.UI.Page

Dim resultArray(9) As Double
Dim i As Integer = 0

Protected Sub btnStore_Click(sender As Object, e As EventArgs) Handles btnStore.Click

    Dim Num As Double

    If i < 9 Then
        For i = 0 To resultArray.Length - 1
            Num = Convert.ToDouble(txtResult.Text)
            resultArray(i) = Num
            i += 1
        Next i
    Else
        txtResult.Text = "10 results already stored"
    End If

End Sub

Protected Sub btnDisplay_Click(sender As Object, e As EventArgs) Handles btnDisplay.Click
    For i = 0 To UBound(resultArray)
        lstResults.Items.Add(resultArray(i).ToString())
    Next
End Sub

无论用户如何输入计算器,结果都会在列表框中显示 10 个零。此外,一旦将 10 个条目添加到数组中,它就不会显示“已存储 10 个结果”。感谢您提供的任何帮助,我是 vb.net 的新手,还在学习中,所以请温柔。

【问题讨论】:

  • 您的数组列表将始终与最后一个 txtResult 值相同
  • 我相信这是因为我需要在 For 循环中包含 btnDisplay 子中的代码,但目前的主要问题是来自用户的文本没有加载到数组中。它总是显示零
  • 首先在 btnStore_Click 中存储您递增 1 的值而不是使用 for 循环,其次您的文本必须是数字
  • 如果将数组更改为对象列表怎么样?
  • 我已经尝试了所有的建议,我非常感谢所有的帮助,但是无论 txtResult 框说什么,列表框中唯一会显示的是零。有什么建议为什么会这样?感谢您提出的任何建议。

标签: arrays vb.net


【解决方案1】:

我制作了使用 List (of T) 存储、显示和清除的示例:

Dim ListDoube As New List(Of Double)

Private Sub btnStore_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStore.Click
    Dim Num As Double = 0

    If ListDoube.Count < 10 Then
        ListDoube.Add(If(Double.TryParse(txtResult.Text, Num), Num, 0))
    Else
        txtResult.Text = "10 results already stored"
    End If
End Sub


Private Sub btnDisplay_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDisplay.Click
    For Each myVal In ListDoube
        lstResults.Items.Add(myVal.ToString)
    Next
End Sub

Private Sub btnClear_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnClear.Click
    lstResults.Items.Clear()
End Sub

【讨论】:

    【解决方案2】:

    如果你还要使用数组:

    Dim resultArray(9) As Double
    Dim i As Integer = 0
    
    Private Sub btnStore_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStore.Click
        Dim Num As Double = 0
    
        If i < 10 Then
            resultArray(i) = If(Double.TryParse(txtResult.Text, Num), Num, 0)
        Else
            txtResult.Text = "10 results already stored"
    
        End If
        i += 1
    End Sub
    
    
    Private Sub btnDisplay_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDisplay.Click
        For Each myVal In resultArray
            lstResults.Items.Add(myVal.ToString)
        Next
    End Sub
    
    Private Sub btnClear_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnClear.Click
        For myCnt = 0 To 9
            resultArray(myCnt) = 0
        Next
        lstResults.Items.Clear()
        i = 0
        txtResult.Text = ""
    End Sub
    

    【讨论】:

      【解决方案3】:

      我想通了,主要是。现在唯一的问题是结果总是在列表的末尾有一个零......不知道如何解决它。因此,如果我输入 2 个条目,例如 4+2 = 6 & 2+2 = 4,那么结果数组中将包含 6、4、0。任何想法如何解决这一问题?再次感谢您的支持/帮助。

      Public Shared resultArray(9) As Double
      Public Shared i As Integer = 0
      
      Protected Sub btnStore_Click(sender As Object, e As EventArgs) Handles btnStore.Click
      
          If i >= 9 Then
              lblError.Text = "10 results already stored"
          Else
              lblError.Text = ""
              resultArray(i) = Convert.ToDouble(txtResult.Text)
              If i < 9 Then
                  i += 1
              End If
          End If
      
      End Sub
      
      Protected Sub btnDisplay_Click(sender As Object, e As EventArgs) Handles btnDisplay.Click
      
          If i <= 0 Then
              lblError.Text = "You must add numbers"
          Else
              lstResults.Items.Clear()
              lblError.Text = ""
              For Num = 0 To i
                  lstResults.Items.Add(resultArray(Num))
              Next Num
          End If
      
      End Sub
      

      【讨论】:

      • 因为你的第一个索引是0,请尝试使用-1,并且你在增加索引后存储数据。所以 -1 表示没有数据 ini 存储
      • 按照@user11982798 的建议,将If i &lt;= 0 Then 更改为If i &lt; 0 Then 如果i = 0,您的数组中有一个条目。
      【解决方案4】:

      btnSave_Click 中不需要任何 For 循环。在您的情况下,for 循环的作用是遍历列表中的所有项目并将输入编号添加到您的数组中。相反,您需要将每个数字分别添加到数组中自己的位置。 为此,只需将 btnSave 更改如下:

      Dim doubleArray(9) As Double
      Dim i As Integer = 0
      
      Private Sub btnSave_Click(sender As Object, e As EventArgs) Handles btnSave.Click
          Dim Num As Double
      
          If i < 10 Then
              doubleArray(i) = (If(Double.TryParse(txtResult.Text, Num), Num, 0))
              i += 1
          Else
              txtResult.Text = "10 results already stored"
          End If
      End Sub
      

      这样你的btnDisplay_Click里面就没有问题了。

      您可以改为使用列表来保存结果。因此,您必须声明一个 List(Of Double) 而不是双数组。所以btnSave_Click应该改成如下:

      Dim listOfDouble As New List(Of Double)
      
      Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
          Dim Num As Double
      
          If listOfDouble.Count < 10 Then
              listOfDouble.Add(If(Double.TryParse(txtResult.Text, Num), Num, 0))
          Else
              txtResult.Text = "10 results already stored"
          End If
      End Sub
      

      你可以使用 For Each 循环来迭代你的列表:

      Private Sub btnDisplay_Click(sender As Object, e As EventArgs) Handles btnDisplay.Click
          For Each doubleVal In listOfDouble
              listResults.Items.Add(doubleVal)
          Next
      End Sub
      

      【讨论】:

      • 为什么要用相同的结果填充数组的每个元素?您需要在调用 btnStore_Click 之间保留 i 的值
      • 使用您的代码,当它遇到 If 语句时,i 将始终为 0,因此,您根本不需要 if。 txtResult.Text 的值不可能在 For 循环内改变。
      猜你喜欢
      • 1970-01-01
      • 2019-11-25
      • 1970-01-01
      • 1970-01-01
      • 2020-10-01
      • 2015-09-13
      • 2011-07-07
      • 2018-12-30
      • 1970-01-01
      相关资源
      最近更新 更多