基本的Visual Basic程序错误 - 可能是可变错误

时间:2012-09-17 23:20:02

标签: vb.net visual-studio-2010

我正在为Visual Basic编写这个程序,它将根据用水量确定账单。我的问题是我输入的所有值在命令提示符中都返回为零。任何人都可以解释这段代码有什么问题吗?


Option Explicit On
Option Strict On

Imports System

module eurekawatercompany

  Sub Main ()
    ' Declare variables of problem
    Dim waterusage as double 
    Dim totalcharge as double

    ' Prompts for user to enter their water usage.
    Console.write ("Please enter your current water usage (cubic feet): ")
    waterusage = convert.toint32(console.readline())
      If (waterusage < 1000) then
      totalcharge = 15

      End If

      If (1000 > waterusage) and (waterusage < 2000) then
      totalcharge = 0.0175 * waterusage + 15

      End If

      else if (2000 < waterusage) and (waterusage > 3000) then
      totalcharge = 0.02 * waterusage + 32.5

      End If
      ' 32.5 is the price of exactly 2000cm^(3) of water

      else if (waterusage > 3000) then
      totalcharge = 70

      End If

    Console.out.writeline ("Total charge is: ")
      Console.out.writeline (totalcharge)


  End sub

End Module

1 个答案:

答案 0 :(得分:3)

首先,你的陈述:

If (1000 > waterusage) and (waterusage < 2000) then

相当于:

If (waterusage < 1000) and (waterusage < 2000) then

意味着它正在测试waterusage 小于1000 小于2000(即,它只是小于1000)。我想你可能意味着:

If (waterusage > 1000) and (waterusage <= 2000) then

你会注意到我也使用了<=,因为你的if语句根本不处理边缘情况(2000年不低于,也不高于2000,因此进入2000年会导致原始的if语句无法解决。

您还需要对0 to 10002000 to 3000案例进行类似的更改。


我也不是完全确定:

:
End If
else if ...

构造是正确的(除非VB.NET在VB6天以来已经在较低级别彻底改变(我知道有很多变化,但改变了这样的低级别的工作) if不太可能。)据我所知,end if会关闭整个 if语句,因此else应该if end ifOption Explicit On Option Strict On Imports System Module EurekaWaterCompany Sub Main () Dim WaterUsage as double Dim TotalCharge as double Console.Out.Write ("Please enter your current water usage (cubic feet): ") WaterUsage = Convert.ToInt32 (Console.In.ReadLine()) If (WaterUsage <= 1000) then TotalCharge = 15 ElseIf (WaterUsage > 1000) and (WaterUsage <= 2000) then TotalCharge = 0.0175 * WaterUsage + 15 ElseIf (Waterusage > 2000) and (WaterUsage <= 3000) then TotalCharge = 0.02 * WaterUsage + 32.5 Else TotalCharge = 70 End If Console.Out.WriteLine ("Total charge is: ") Console.Out.WriteLine (TotalCharge) End sub End Module

之间

所以我会看到类似的东西:

Out

该代码还有一些小修复,例如为I / O正确指定Inif,并使用“正确”大写,虽然它没有经过全面测试,但可能仍然存在一些语法错误。 <= 1>代码背后的想法(基本上是ElseIf (WaterUsage > 1000) and (WaterUsage <= 2000) then TotalCharge = 0.0175 * (WaterUsage - 1000) + 15 语句)仍然是合理的。


但是,您可能需要检查规格。

当公用事业公司对其资源收费时,他们倾向于对超额征收更高的费率超过一定水平,而不是整个金额。换句话说,我希望看到第一 1000立方英尺的费用为15美元,然后每立方英尺超过的费用为1.75美分,这将使您的陈述看起来更像:

{{1}}

这种情况在这种情况下是有意义的,因为你的第一千,第一千,1.75c / ft 3 为第二千,你收取1.5c / ft 3 ,第三千元的2c / ft 3 ,下限为15美元(无论你实际使用多少,你都会被收取第一千元的费用),而使用更多的人则需要70美元的固定费用超过三千立方英尺(一种罚款率)。

但是,根据经验,这是我的假设。可能是您的规格另有说明,在这种情况下可以随意忽略本节。