此程序可转换用户输入的英寸,英尺或码,并将其转换为英寸,英尺或码。它以100%的效率工作,从我的测试来看,它没有错误。如果你发现任何我道歉。
我的问题是,因为对于这么简单的事情来说这是一段非常冗长的代码。有没有更简单的方法来写这个?我的一个朋友正在研究同样的问题而且他已经死定了,有一种更简单的方法。
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
// Declared inches, feet, and yards a global variable.
public double feet;
public double inches;
public double yards;
private void convertButton_Click(object sender, EventArgs e)
{
// Declared a variable for an the originlalDistanceInput
double distanceInput;
// Checks to make sure that the user didn't input a letter. If so return an error message.
if (!double.TryParse(originalDistanceInput.Text, out distanceInput) || distanceInput < 0)
{
MessageBox.Show("Please enter an a number greater than 0 and not a letter.", "Notice");
originalDistanceInput.Clear();
}
else
{
if (fromList.SelectedIndex == -1)
{
MessageBox.Show("Please select a conversion input.");
}
else if (toList.SelectedIndex == -1)
{
MessageBox.Show("Please select a conversion output.");
}
// Checks the listbox to make sure that the
else if (fromList.SelectedIndex != -1)
{
string from = fromList.SelectedItem.ToString();
switch (from)
{
case "Inches":
if (toList.SelectedIndex == 0)
{
MessageBox.Show("You did not make a conversion!", "Notice");
originalDistanceInput.Clear();
}
else if (toList.SelectedIndex == 1)
{
feet = distanceInput / 12;
convertedOutput.Text = feet.ToString("##.#### 'FT'");
}
else if (toList.SelectedIndex == 2)
{
yards = distanceInput / 36;
convertedOutput.Text = yards.ToString("##.#### 'YD'");
}
break;
case "Feet":
if (toList.SelectedIndex == 0)
{
inches = distanceInput * 12;
convertedOutput.Text = inches.ToString("##.#### 'IN'");
}
else if (toList.SelectedIndex == 1)
{
MessageBox.Show("You did not make a converstion!", "Notice");
originalDistanceInput.Clear();
}
else if (toList.SelectedIndex == 2)
{
yards = distanceInput / 3;
convertedOutput.Text = yards.ToString("##.#### 'YD'");
}
break;
case "Yards":
if (toList.SelectedIndex == 0)
{
inches = distanceInput * 36;
convertedOutput.Text = inches.ToString("##.#### 'IN'");
}
else if (toList.SelectedIndex == 1)
{
feet = distanceInput * 3;
convertedOutput.Text = feet.ToString("##.#### 'FT'");
}
else if (toList.SelectedIndex == 2)
{
MessageBox.Show("You did not make a converstion!", "Notice");
originalDistanceInput.Clear();
}
break;
}
}
}
}
}
答案 0 :(得分:2)
如果我是你,我会将所有内容转换为标准单位,然后将其转换回输出单位。这将使它最终具有更大的可扩展性。可以反向使用相同的转换因子来获得输出单元。事实上,如果你能做到这一点,那就制作一个具有单位名称的对象,转换为标准参考(我会使用公制单位,因为它们是最标准的),以及你需要的任何其他东西。例如,你可以创建一个类单元(Proto代码,我还不是C#guru ......)
class Unit {
private float convertToStandard;
private string unitName;
Unit(float conversionFactor, string unitName) {
convertToStandard=coversionFactor;
this.unitName=unitName;
}
}
然后你可以做很多事情,比如添加一个隐蔽函数来将它改成不同的单位,接受一个单位函数。这个单元功能虽然可以添加几行代码,但整体上会更加清晰,并且允许您添加新单元,只需要几个额外的调用。因此,添加新单位变得非常简单:
new Unit (1,"meter");
new Unit (0.3048,"feet");
添加转换功能,它更容易。 convert函数可能如下所示(在Unit类中):
public float convertToThisUnit(Unit from) {
return from.convertToStandard/this.convertToStandard;
}
你可以继续,但最重要的是,单位转换应该采取某种面向对象的方法,这将使它更简单,虽然它可能添加几行代码用于这样一个简短的例子,你在这里。