1

我正在为 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
4

1 回答 1

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关闭据我所知,整个 声明,所以应该在and之间ifelseifend if

所以我会看类似的东西:

Option 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

该代码还有一些小的修复,例如正确指定I/OOutIn使用“正确”大写,尽管它没有经过全面测试并且可能仍然存在一些语法错误。代码背后的想法(基本上是if声明)仍然是合理的。


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

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

ElseIf (WaterUsage > 1000) and (WaterUsage <= 2000) then
    TotalCharge = 0.0175 * (WaterUsage - 1000) + 15

在这种情况下,这是有道理的,因为第一千人的收费为 1.5c/ft 3,第二千人的费用为 1.75c/ft 3 第三千人的费用为2c/ft 3,下限为 15 美元(无论您实际使用多少,您都会收取前一千美元的费用),对于使用超过三千立方英尺的任何人,您将收取 70 美元的固定费用(有点像罚款率)。

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

于 2012-09-17T23:26:53.303 回答