- == 系统问题,暂停聊天功能。==
- 【征集】西西河的经济学,及清流措施,需要主动参与者,『稷下学宫』新认证方式,24年网站打算和努力目标
主题:请教VB高人一个问题,不难,但是我怎么也做不出来。 -- 锦候
题目是这样的:写一个程序,当一个按钮每次被按的时候,都会从一个text box读入一个成绩。当第二个按钮被按的时候,就会显示最高的两个成绩。把两个变量设成class-level的变量来追踪两个最高的成绩。
这个是书上的练习题,是在"if block"后面的练习,也就是说要用if语句来做,
我写的程序如下,但是只可以把最高的成绩显示出来,第二高的成绩总是不对。想了很久不得要领,z只好麻烦大家一下了。谢谢了!这个是我自己做练习的,题目不难!可是就是想不通了。
Public Class Form1
Dim a As Double =0
Dim b As Double = 1
Private Sub btnDisplay_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDisplay.Click
Dim score As Double
score = CDbl(txtScore.Text)
If (score > a) And (score < b) Then
b = score
ElseIf (score > b) Then
a = score
End If
txtScore.Clear()
txtScore.Focus()
End Sub
Private Sub btnEvaluate_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnEvaluate.Click
txtOutput.Text = a & " " & b
End Sub
End Class
我的做法有个明显的问题就是我给这两个变量0,1两个值,这个题没问题但是要是在实际情况中,需要比较实数的值的话,这个做法就错了。
我用1,2,3,4,5,6,7,8,9作输入结果每次都只显示 9 和 1 两个值,明显不对。
麻烦哪位高人帮帮手,谢谢了! 大大的花!
逻辑有点不清
如果a代表次大数,b代表最大数,则应该考虑
1:score>b:原先的最大数变成次大,最大数变成score
2:a<score<b:最大数仍保持不变,次大数变成score
If (score > a) And (score < b) Then
b = score
ElseIf (score > b) Then
a = score
End If
这段有问题。感觉应改为
If (score > a) And (score < b) Then
a = score
ElseIf (score > b) Then
a = b
b = score
End If
a是第二高的数,b是第一高的数。
你的程序当输入的时候1时无操作,之后反复置a直到a=9所以输出9,1
先说说我对你的思路的理解:
你有两个变量 a 与 b, a 用来放最大值, b 用来放次大值,只需要记住最大的两个数目,排除相同的数目。
如果是这样就好办,
a 与 b 初始值都当作是0
总共有三种情况要处理:
假如score大过a,(隐含的意思是,肯定也大过b) 那么score就是最大值,a变成了次大值,在这种情况下,b就应该储存a的值,a就储存score的值。
假如score小过a, 但大过b,则a不变,b储存score的值
假如score小过b,则a,b都不变,
对比你自己的if block,a 与 b 的初始值, 看出问题在哪里了吗?
给最大值赋值后忘了处理次大值了。
Public Class Form1
Dim a As Double
Dim b As Double
现在也可以比较两个实数了!
Private Sub btnDisplay_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDisplay.Click
Dim score As Double
score = CDbl(txtScore.Text)
If (score > a) And (score < b) Then
a = score
ElseIf (score > b) Then
a = b
加了一句,关键的一句哈哈!谢谢呀!
b = score
End If
txtScore.Clear()
txtScore.Focus()
End Sub
Private Sub btnEvaluate_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnEvaluate.Click
txtOutput.Text = a & " " & b
End Sub
End Class
同样用1,2,3,4,5,6,7,8,9做输入结果是8,9。我想了快两个小时,您10秒钟就解决了,太谢谢了!以后您要有空的话还麻烦多多指点。谢谢!花!
本帖一共被 2 帖 引用 (帖内工具实现)
就是程序里score =b的情况没考虑,应改为
If (score > a) And (score <= b) Then
或
ElseIf (score >= b) Then
(不懂vb,不知道里面大于等于和小于等于是不是>=和<=)
本帖一共被 1 帖 引用 (帖内工具实现)
多谢多谢!以后小子再有是有问题还请多多指点。谢谢!
我改好了,谢谢!我以后再有问题您要是有空的还请多多指点,谢谢!花!
我的改法和您说的一样!
对等于的话也要考虑进去,不然两个一样的成绩是最高的话,只会显示一个。另一个还是显示次高,我是忽略了这个等于的情况!您真厉害!谢谢了!
如果没有输入,无所谓最大最小
输入一个值,当然是最大的
所以要跟踪输入数值的数目
不过这个题是个简单的if语句的练习题,可能不需要那么复杂,而且每次的输入在比较后小的值就直接忽略了。
如果只输入一个值就按第二个按钮的话vb会给个其中一个变量赋值为0。显示0和输入的那个数。
而如果没有输入就按第二个按钮的话,会给个错误提示。