我正在为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
答案 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 1000
和2000 to 3000
案例进行类似的更改。
我也不是完全确定:
:
End If
else if ...
构造是正确的(除非VB.NET在VB6天以来已经在较低级别彻底改变(我知道有很多变化,但改变了这样的低级别的工作) if
不太可能。)据我所知,end if
会关闭整个 if
语句,因此else
应该if
在end 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
。
所以我会看到类似的东西:
Out
该代码还有一些小修复,例如为I / O正确指定In
和if
,并使用“正确”大写,虽然它没有经过全面测试,但可能仍然存在一些语法错误。 <= 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美元的固定费用超过三千立方英尺(一种罚款率)。
但是,根据经验,这是我的假设。可能是您的规格另有说明,在这种情况下可以随意忽略本节。