Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net VisualBasicBMI计算器给出NaN结果_Vb.net_Calculator - Fatal编程技术网

Vb.net VisualBasicBMI计算器给出NaN结果

Vb.net VisualBasicBMI计算器给出NaN结果,vb.net,calculator,Vb.net,Calculator,我正在为大学学习一门IT课程,其中一项作业要求您使用面向对象的技术在Visual Basic中创建BMI计算器。我不是一个很好的程序员,因此我一直在遇到一个问题。我使用的代码是有人给我的,他声称它是有效的,但是当我运行程序时,给出的任何结果都是错误的 为了给我这个结果,有人知道代码出了什么问题吗 以下是我正在使用的代码: Public Class Form1 Private Sub Button_Calculate_Click(sender As Object, e As EventArgs)

我正在为大学学习一门IT课程,其中一项作业要求您使用面向对象的技术在Visual Basic中创建BMI计算器。我不是一个很好的程序员,因此我一直在遇到一个问题。我使用的代码是有人给我的,他声称它是有效的,但是当我运行程序时,给出的任何结果都是错误的

为了给我这个结果,有人知道代码出了什么问题吗

以下是我正在使用的代码:

Public Class Form1
Private Sub Button_Calculate_Click(sender As Object, e As EventArgs) Handles 
Button_Calculate.Click
    Dim height As Double = Double.Parse(TextBox_Height.Text)
    Dim weight As Double = Double.Parse(TextBox_Weight.Text)


    bmi.SetWeight(weight)
    bmi.SetHeight(height)

    TextBox_BMI.Text = Format(bmi.GetBMI(), "0.00")
End Sub

Private bmi As New BMI
End Class
在单独的类别中:

Public Class BMI
Public Function GetBMI()
    Return (weight / (height ^ 2))
End Function

Public Function GetWeight()
    Return weight
End Function
Public Function GetHeight()
    Return height
End Function

Public Function SetWeight(_weight As Double)
    Return weight = _weight
End Function
Public Function SetHeight(_height As Double)
    Return height = _height
End Function

Private weight As Double
Private height As Double
End Class

在朋友的帮助下,我解决了我的问题

如果有人好奇的话,下面是使它工作的代码:

Public Class Form1
 Sub Button_Calculate_Click(sender As Object, e As EventArgs) Handles 
Button_Calculate.Click
  Dim bmi As New BMI With {.Weight = CDbl(TextBox_Weight.Text), .Height = 
  CDbl(TextBox_Height.Text)}
  TextBox_BMI.Text = Format(bmi.GetBMI(), "0.00")
End Sub


Private bmi As New BMI
End Class
以及:


在朋友的帮助下,我解决了我的问题

如果有人好奇的话,下面是使它工作的代码:

Public Class Form1
 Sub Button_Calculate_Click(sender As Object, e As EventArgs) Handles 
Button_Calculate.Click
  Dim bmi As New BMI With {.Weight = CDbl(TextBox_Weight.Text), .Height = 
  CDbl(TextBox_Height.Text)}
  TextBox_BMI.Text = Format(bmi.GetBMI(), "0.00")
End Sub


Private bmi As New BMI
End Class
以及:


您的(意思是kushlord420)解决方案存在一些问题

  • Visual Basic代码不区分大小写,因此bmi与bmi相同
  • 您从未使用表单级别变量bmi,因此请删除
  • 您试图编写自定义构造函数,但在vb.net中它是次新的
  • 您正在将“重量”和“高度”文本框中的值转换为“双精度”,但您的属性类型为“单精度”。实际上这应该 单身,但那是另一天的事
  • vb.net中的函数必须具有返回值的数据类型。这在函数的第一行中提供。既然你是 使用返回值的格式,我将该值设置为字符串 已转换返回值
  • 修复了构造函数参数以避免歧义
  • 子按钮\u计算\u单击(发件人作为对象,e作为事件参数)处理按钮\u计算。单击
    将体重指数调整为新的体重指数(CSng(文本框\体重.Text)、CSng(文本框\身高.Text))
    TextBox_BMI.Text=格式(BMI.GetBMI(),“0.00”)
    端接头
    公共类BMI
    作为字符串的公共函数GetBMI()
    返回(重量/(高度^2)).ToString
    端函数
    公共财产作为单一资产的权重
    公共财产高度为单一
    新公共子系统(wght为单体,hght为单体)
    重量=wght
    高度=高度
    端接头
    末级
    
    您的(意思是kushlord420)解决方案存在一些问题

  • Visual Basic代码不区分大小写,因此bmi与bmi相同
  • 您从未使用表单级别变量bmi,因此请删除
  • 您试图编写自定义构造函数,但在vb.net中它是次新的
  • 您正在将“重量”和“高度”文本框中的值转换为“双精度”,但您的属性类型为“单精度”。实际上这应该 单身,但那是另一天的事
  • vb.net中的函数必须具有返回值的数据类型。这在函数的第一行中提供。既然你是 使用返回值的格式,我将该值设置为字符串 已转换返回值
  • 修复了构造函数参数以避免歧义
  • 子按钮\u计算\u单击(发件人作为对象,e作为事件参数)处理按钮\u计算。单击
    将体重指数调整为新的体重指数(CSng(文本框\体重.Text)、CSng(文本框\身高.Text))
    TextBox_BMI.Text=格式(BMI.GetBMI(),“0.00”)
    端接头
    公共类BMI
    作为字符串的公共函数GetBMI()
    返回(重量/(高度^2)).ToString
    端函数
    公共财产作为单一资产的权重
    公共财产高度为单一
    新公共子系统(wght为单体,hght为单体)
    重量=wght
    高度=高度
    端接头
    末级
    
    您确实需要这样的东西:

    Public Class BMI
        Public Function GetBMI() As Double
            Return (weight / (height ^ 2))
        End Function
    
        Public Property Weight As Double
        Public Property Height As Double
    
        Public Sub New(weight As Double, height As Double)
            Me.Weight = weight
            Me.Height = height
        End Sub
    End Class
    
    Public Class Form1
        Private Sub Button_Calculate_Click(sender As Object, e As EventArgs) Handles Button_Calculate.Click
            Dim bmi As New BMI(CDbl(TextBox_Weight.Text), CDbl(TextBox_Height.Text))
            TextBox_BMI.Text = Format(bmi.GetBMI(), "0.00")
        End Sub
    End Class
    
    或者更好的办法是:

    Public Class BMI
    
        Public Property Weight As Double
        Public Property Height As Double
    
        Public ReadOnly Property BMI As Double
            Get
                Return (Weight / (Height ^ 2))
            End Get
        End Property
    
        Public Sub New()
        End Sub
    
        Public Sub New(weight As Double, height As Double)
            Me.Weight = weight
            Me.Height = height
        End Sub
    End Class
    

    你真的需要这样的东西:

    Public Class BMI
        Public Function GetBMI() As Double
            Return (weight / (height ^ 2))
        End Function
    
        Public Property Weight As Double
        Public Property Height As Double
    
        Public Sub New(weight As Double, height As Double)
            Me.Weight = weight
            Me.Height = height
        End Sub
    End Class
    
    Public Class Form1
        Private Sub Button_Calculate_Click(sender As Object, e As EventArgs) Handles Button_Calculate.Click
            Dim bmi As New BMI(CDbl(TextBox_Weight.Text), CDbl(TextBox_Height.Text))
            TextBox_BMI.Text = Format(bmi.GetBMI(), "0.00")
        End Sub
    End Class
    
    或者更好的办法是:

    Public Class BMI
    
        Public Property Weight As Double
        Public Property Height As Double
    
        Public ReadOnly Property BMI As Double
            Get
                Return (Weight / (Height ^ 2))
            End Get
        End Property
    
        Public Sub New()
        End Sub
    
        Public Sub New(weight As Double, height As Double)
            Me.Weight = weight
            Me.Height = height
        End Sub
    End Class
    

    您应该将
    Public Sub BMI(…)
    改为
    Public Sub New(…)
    ,然后您可以将代码缩短为:
    Dim BMI As New BMI(CDbl(TextBox\u Weight.Text)、CDbl(TextBox\u Height.Text))
    为什么要改为
    Single
    Double
    更好。@Enigmativity为什么Double更好?我不是一个真正的程序员,我这样做只是为了完成一项大学作业,只要代码按预期工作,这并不重要。@kushlord420-CPU使用
    双工
    。即使您有一个
    Single
    ,它也会转换为
    Double
    进行计算。如果你有非常大的列表,唯一的优势就是内存。您还可以使用
    Double
    获得更小的舍入误差。您应该将
    Public Sub BMI(…)
    改为
    Public Sub New(…)
    ,然后您可以将代码缩短为:
    Dim BMI As New BMI(CDbl(TextBox\u Weight.Text),CDbl(TextBox\u Height.Text))
    为什么要改为
    Single
    Double
    更好。@Enigmativity为什么Double更好?我不是一个真正的程序员,我这样做只是为了完成一项大学作业,只要代码按预期工作,这并不重要。@kushlord420-CPU使用
    双工
    。即使您有一个
    Single
    ,它也会转换为
    Double
    进行计算。如果你有非常大的列表,唯一的优势就是内存。使用
    Double
    时,舍入误差也要小得多。这里的问题是VB.NET不支持内联赋值<代码>返回权重=_-weight
    将首先计算
    权重
    是否等于
    _-weight
    ,然后返回结果布尔值(
    )。您需要单独设置
    weight=\u weight
    ,然后
    返回weight
    。如果这是实际代码,则您将使用
    选项Strict Off运行编译器(这是默认设置)。如果将其更改为
    选项Strict On
    ,编译器将在您运行代码之前发现许多错误。如果我试图编译你的
    BMI
    类,那么我会得到错误
    “BC30210选项Strict On requires all Function,Pro