Vb.net VisualBasicBMI计算器给出NaN结果
我正在为大学学习一门IT课程,其中一项作业要求您使用面向对象的技术在Visual Basic中创建BMI计算器。我不是一个很好的程序员,因此我一直在遇到一个问题。我使用的代码是有人给我的,他声称它是有效的,但是当我运行程序时,给出的任何结果都是错误的 为了给我这个结果,有人知道代码出了什么问题吗 以下是我正在使用的代码: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)
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)解决方案存在一些问题
子按钮\u计算\u单击(发件人作为对象,e作为事件参数)处理按钮\u计算。单击
将体重指数调整为新的体重指数(CSng(文本框\体重.Text)、CSng(文本框\身高.Text))
TextBox_BMI.Text=格式(BMI.GetBMI(),“0.00”)
端接头
公共类BMI
作为字符串的公共函数GetBMI()
返回(重量/(高度^2)).ToString
端函数
公共财产作为单一资产的权重
公共财产高度为单一
新公共子系统(wght为单体,hght为单体)
重量=wght
高度=高度
端接头
末级
您的(意思是kushlord420)解决方案存在一些问题
子按钮\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