计算测量转换
本文关键字:转换 测量 计算 | 更新日期: 2023-09-27 18:35:52
我是C#的新手,正在上一门我正在努力的课程。
分配是使用文本框值 (valuetextbox) 创建一个转换应用程序,并具有 2 个列表框,其中包含英寸、英尺和码的测量值。 目标是根据在第一个列表框中选择的度量单位(选定初始单位)转换值,并根据在第二个列表框中选择的计量单位(选定转换单位)在标签中过帐值。 我错过了如何根据输入到值文本框中的值在我选择的初始单位和我的选定转换单位之间进行比较(数学)。
namespace Measurement_Conversion
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void convertedValueLabel_Click(object sender, EventArgs e)
{
}
private void exitButton_Click(object sender, EventArgs e)
{
Close();
}
private void resetButton_Click(object sender, EventArgs e)
{
valueTextBox.Text = "";
convertedValueLabel.Text = "";
DesiredUnitBox.SelectedIndex = -1;
InitialUnitBox.SelectedIndex = -1;
valueTextBox.Focus();
}
private void convertButton_Click(object sender, EventArgs e)
{
//Declare Variables
decimal initialvalue;
decimal convertedvalue;
string selectedInitialUnit;
string selectedConvertedUnit;
//Grab Initial Value
initialvalue = int.Parse(valueTextBox.Text);
//Determining Initial Unit has been selected.
if (InitialUnitBox.SelectedIndex != -1)
{
selectedInitialUnit = InitialUnitBox.SelectedItem.ToString();
}
else { MessageBox.Show("Please select an Initial Unit of measurement."); }
//Determining Desired Conversion Unit has been selected
if (DesiredUnitBox.SelectedIndex != -1)
{
selectedConvertedUnit = DesiredUnitBox.SelectedItem.ToString();
}
else { MessageBox.Show("Please select a desired conversion unit of measurement."); }
//Switch Statement
switch (selectedInitialUnit)
{
case "Inches":
convertedValueLabel.Text = ()
break;
case "Feet":
break;
case "Yards":
break;
}
}
}
}
我在纸上写的东西是这样说的——这不是代码,只是我的思考过程:
if selectedinitialunit = INCHES and selectedconvertedunit = INCHES
then messagebox.show("Please select a different selectedconvertedunit");
else selectedinitialunit = INCHES and selectedconvertedunit = FEET
then convertedvaluelabel.Text = initialvalue/12;
else selectedinitialunit = INCHES and selectedconvertedunit = YARDS
then convertedvaluelabel.Text = initialvalue/36;
以此类推,用于其他选定的初始单位。
非常感谢您的帮助,我希望我不会在这里到处都是。
提前谢谢你!
你可以
这样写代码——
string selectedUnit = selectedinitialunit.SelectedItem.ToString();
string convertedUnit = selectedconvertedunit.SelectedItem.ToString();
double valueToConvert = double.Parse(initialvalue.Text);
if (selectedUnit.Equals(convertedUnit))
{
MessageBox.Show("Please select a different selectedconvertedunit");
}
else
{
switch (selectedUnit)
{
case "INCHES":
switch (convertedUnit)
{
case "FEET":
convertedvaluelabel.Text = (valueToConvert / 12.0).ToString();
break;
case "YARDS":
convertedvaluelabel.Text = (valueToConvert / 36.0).ToString();
break;
}
break;
}
}
始终可以在代码中添加某种异常和错误处理以及验证。
最简单的方法是选择一个"基本"测量值并转换为该测量值,然后再从该测量值转换。
它甚至可以是米或毫米。这样,您只需要 2(例如,如果您选择英寸)或 3 个乘数即可使其直截了当。
const double InchesInFoot = 12;
const double InchesInYard = InchesInFoot * 3;
// step 1
double valueInches = input * constant above according to input measurement;
// step 2
double result = valueInches / constant according to output measurement;
你也可以使用矩阵,如
double[,] factors = new double[3, 3] {
{ 1.0, 1.0/12, 1.0/12/3 },
{ 12.0, 1, 1.0/3 },
{ 12*3,3,1 }
};
const int Inches = 0;
const int Feet = 1;
const int Yards = 2;
var result = factors[Yards, Inches] * 1;
这将使它更容易阅读,但你需要提前做更多的数学运算。
我想这需要你理解多维数组和事物,以及比所需的多一点数学。
您可以使用:
//Switch Statement
switch (selectedInitialUnit + "->" + selectedconvertedunit)
{
case "Inches->Feet":
convertedValueLabel.Text = ()
break;
case "Feet->Inches":
break;
case "Yards->Feet":
break;
case "Yards->Yards":
case "Feet->Feet":
Messagebox.Show("Please select a different selectedconvertedunit");
break;
}
另一种方法是直接使用SelectedIndex
。
只是在这里发布让您知道,我不建议使用以下代码。
示例,如果InitialUnitBox
和DesiredUnitBox
的数字项<10,则可以使用:
switch (InitialUnitBox.SelectedIndex * 10 + DesiredUnitBox.SelectedIndex)
{
case 0: // = 0 * 10 + 0: first item of both box
case 11: // Same index both box
case 22: // Same index both box
Messagebox.Show("Please select a different selectedconvertedunit");
break;
case 10: // = 1 * 10 + 0: second item of InitialUnitBox and first item of DesiredUnitBox
break;
case 11: // = 1 * 10 + 1
break;
}