2010-09-05 78 views
0

为什么这段代码不起作用? 它返回一个意外的值实际上总= 0如何使用函数的返回值?

total = Cscore(TextBox1.Text) * CDbl(TextBox2.Text) 

试图在这个

total = TextBox1.Text * TextBox2.Text 

它返回预期值,但我需要textbox1.text传递给函数来获取理想值

的功能是本

Public Function Cscore(ByVal score As Integer) As Double 

    Select Case score 
     Case score = 100 
      Return 5.0 
     Case score >= 95 
      Return 5.0 
     Case score >= 90 
      Return 4.75 
     Case score >= 85 
      Return 4.5 
     Case score >= 80 
      Return 4.0 
     Case score >= 75 
      Return 3.5 
     Case score >= 70 
      Return 3.0 
     Case score >= 65 
      Return 2.5 
     Case score >= 60 
      Return 2.0 
     Case score < 60 
      Return 1.0 
    End Select 
End Function 

感谢我n advance

+3

如果您告诉我们*以何种方式*代码不起作用,回答这个问题会容易得多。它会抛出一个错误吗?回报意想不到的价值,是什么?关闭我的头顶,通过将文本框的Text属性传递给该函数,导致从“字符串”到“int”的隐式转换... – 2010-09-05 01:58:38

回答

4

东西使用选项严格上会帮助您快速找到问题。您的Case语句的语法是错误的,那些表达式的计算结果为布尔值。

Select Case score 
     Case Is = 100 
      Return 5.0 
     Case Is >= 95 
      Return 5.0 
     Case Is >= 90 
      Return 4.75 
     '' etc... 
    End Select 

使用选项严格上,而你学习编程的VB.NET:得分很少会等于真或假,你只有分数等于0或1。你需要把它写这样得到的值。当你成为主人时,你可以再次关闭它。

+0

谢谢你的作品 – 2010-09-05 02:56:02

+1

+ 1为一般的好建议。还要考虑*不*关闭Option Strict,因为为什么不让编译器捕获这样的错误? – 2010-09-05 04:42:55

+0

同样,如果返回> = 95和= 100的结果相同,为什么有两种情况?除非这是为了示例代码的目的而过分简化。 – Caltor 2011-10-24 11:53:13

2

对于初学者来说,如果该值大于100,那么这个函数没有返回值(它会返回类型的默认值 - 在这个例子中为0)。

在调用期望Integer的函数之前,还应该使用Integer.TryParse来验证所有输入是整数。

最后,我建议在任何select声明的末尾总是有一个case else

0

,如果你尝试什么沿线的

Dim tb1 as Integer = Integer.Parse(TextBox1.Text) 
Dim tb2 as Integer = Integer.Parse(TextBox2.Text) 

total = Cscore(tb1) * tb2 
+0

同样的结果 0被返回 – 2010-09-05 02:23:17