我的作业需要在不同的度量单位之间进行大量转换。除了数学部分,我完成了所有的工作。我的问题是,如果有人有更好的解决方案,那么最好是使用switch或if语句进行这些计算吗?这是关于我的程序的一些背景信息。我有一个文本文件,其中包含9个不同的度量单位,以及以逗号分隔的长度,用逗号分隔,如下所示:
英寸,0.083333
揣摸,6
脚,1个
弗隆,660
公里,3281.5
计,3.2815
英里,5280
杆,16.5
院子里,3
所以,我已成功将所有信息转储到字符串数组中。从那里我分裂了两次字符串数组。我第一次拆分字符串数组时,创建了一个新的字符串数组,它只包含每个度量单位的名称。第二次我拆分字符串数组,我做了它,所以我可以创建一个双数组来保存每个测量单位的所有数值。现在我需要做数学部分。我的程序将显示九个不同的度量单位,请求单位转换,请求单位转换,请求转换的数量(或总测量),然后显示转换的数量。到目前为止,这就是我所拥有的:
private void SandC_Load(object sender, EventArgs e)
{
splitContainer1.Panel1Collapsed = false;
splitContainer1.Panel2Collapsed = true;
string[] lengths = File.ReadAllLines("Units.txt");
int count=0;
string[] unitName=new string[count];
while (!(count==10))
{
count++;
lbLengths.Items.Add(count+"."+" "+lengths[count-1].Split(new Char[]{','})[0]);
}
}
private void btnConvert_Click(object sender, EventArgs e)
{
string orginalunits = tborginalUnits.Text;
int orginalunits1;
string desiredunits = tbDesiredunits.Text;
int desiredunits1;
string lenghttoConvert = tbConvert.Text;
double lenghttoConvert1;
string[] lengths = File.ReadAllLines("Units.txt");
int count = lengths.Length;
double[] units = new double[lengths.Length];
for (int i = 0; i < lengths.Length;i++)
{
units[i] = Convert.ToDouble(lengths[i].Split(new Char[] { ',' })[1]);
}
if ((double.TryParse(lenghttoConvert, out lenghttoConvert1)) && (Int32.TryParse(orginalunits, out orginalunits1)) && (Int32.TryParse(desiredunits, out desiredunits1)))
{
if ((desiredunits1==3)&&(orginalunits1==1))
{
double answer;
answer = units[0] * lenghttoConvert1;
Math.Round(answer, 3);
mtbOutput.Text = Convert.ToString(answer);
lblConversion.Text = "Converted to foot length";
}
}
else
MessageBox.Show("In the'Orginal and Desired Units' boxes, please enter only the numbers 1 -9, and in the 'Length to Covert' Box, please enter only numbers");
}
因此,您可以在按钮点击事件中看到,我处于转换应该发生的位置。我的问题再一次是我应该用来处理所有这些计算的最佳方法?我已经有了1 if语句,如果我要做if语句,我觉得好像很乏味,并且想知道是否有更有效的方法。感谢您的帮助,我真的很感激。
答案 0 :(得分:2)
最好的方法是使用一点数学来完全避免条件。
无论原始单位和目标单位是什么,您都可以通过将原始单位转换为英尺然后将英尺转换为目标单位来进行转换。
假设您希望从索引X
的{{1}}单位转到索引i
的单位。您需要做的就是将j
除以X
,再乘以units[i]
。无需条件或开关。
该程序如何知道选择哪个单位?
这取决于您的计划的组织。如果在UI中使用单位名称的下拉框,这可能是一个非常简单的任务,因为所选项目的索引将与units[j]
数组中的转换率索引相同。
答案 1 :(得分:0)
鉴于此具体示例,if语句和switch语句都是多余的。
解决此问题的另一种方法是创建一个映射表(二维数组),您可以在其中指定两个单位之间的转换乘数,尤其是您的代码已使用数字来表示单位而不是实际名称。
例如
C[1][1] = 1;
C[1][2] = 3.1;
C[1][3] = 5;
C[1][4] = 0.33;
C[2][1] = 1/C[1][2];
....
....
C[4][1] = 1/C[1][4];
创建该阵列后,您只需根据源和目标货币插入数字即可进行转换。
您可以通过创建一个或两个if语句来进一步改进上述内容,该语句检查数组的第一个参数是否小于第二个参数。如果是,则按原样取值,如果不取值的倒数。因此,您不必使用以下值填充整个数组:
C[2][1] = 1/C[1][2];
C[4][1] = 1/C[1][4];
希望有所帮助。