淘客熙熙

主题:请教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 两个值,明显不对。

    麻烦哪位高人帮帮手,谢谢了! 大大的花!

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

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

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

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

      • 家园 您说的对!谢谢了!

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

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

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

    • 家园 这个简单

      先说说我对你的思路的理解:

      你有两个变量 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 的初始值, 看出问题在哪里了吗?

      • 家园 您老真是高屋建瓴呀,我都晕了。佩服死了!

        链接出处

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

    • 家园 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

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

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

        我的改法和您说的一样!

        链接出处

      • hehe
        家园 其实还有个小bug

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

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

        ElseIf (score >= b) Then

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


        本帖一共被 1 帖 引用 (帖内工具实现)
        • 家园 vb里面大于等于和小于等于是&gt;=和&lt;=

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

    • 家园 ??

      逻辑有点不清

      如果a代表次大数,b代表最大数,则应该考虑

      1:score>b:原先的最大数变成次大,最大数变成score

      2:a<score<b:最大数仍保持不变,次大数变成score

      • ??
        家园 太感谢了,改好了!确实是个逻辑问题!

        给最大值赋值后忘了处理次大值了。

        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 帖 引用 (帖内工具实现)
分页树展主题 · 全看首页 上页
/ 1
下页 末页


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

Copyright © cchere 西西河