西西河

主题:请教VB高人一个问题,不难,但是我怎么也做不出来。 -- 锦候

共:💬12 🌺6 新:
全看树展主题 · 分页首页 上页
/ 1
下页 末页
家园 请教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

家园 hehe

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 帖 引用 (帖内工具实现)
hehe
家园 其实还有个小bug

就是程序里score =b的情况没考虑,应改为

If (score > a) And (score <= b) Then

ElseIf (score >= b) Then

(不懂vb,不知道里面大于等于和小于等于是不是>=和<=)


本帖一共被 1 帖 引用 (帖内工具实现)
家园 您老真是高屋建瓴呀,我都晕了。佩服死了!

链接出处

多谢多谢!以后小子再有是有问题还请多多指点。谢谢!

家园

突突:其实还有个小bug

hehe
家园 谢谢了,您真是人如其名呀!突突一下就解决了。

我改好了,谢谢!我以后再有问题您要是有空的还请多多指点,谢谢!花!

我的改法和您说的一样!

链接出处

家园 vb里面大于等于和小于等于是&gt;=和&lt;=

对等于的话也要考虑进去,不然两个一样的成绩是最高的话,只会显示一个。另一个还是显示次高,我是忽略了这个等于的情况!您真厉害!谢谢了!

家园 还有一个问题:已经输入了几个值

如果没有输入,无所谓最大最小

输入一个值,当然是最大的

所以要跟踪输入数值的数目

家园 您说的对!谢谢了!

不过这个题是个简单的if语句的练习题,可能不需要那么复杂,而且每次的输入在比较后小的值就直接忽略了。

如果只输入一个值就按第二个按钮的话vb会给个其中一个变量赋值为0。显示0和输入的那个数。

而如果没有输入就按第二个按钮的话,会给个错误提示。

全看树展主题 · 分页首页 上页
/ 1
下页 末页


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河