我尝试使用符号||代表或。但是,当我在我的程序中尝试它时,它仍然显示错误消息,我将它实际放在消息框中并显示给用户,让他们知道他们输入错误,但是,即使我输入正确它仍然向我显示该消息。以下是我的代码。希望会有人帮我冷。
private void SaveChanges()
{
//declare variable for store code integer
int storeCode = 0;
//check if first and last name are empty
if (txtName.Text == "")
{
MessageBox.Show("Fill in First Name", "Missing Data");
txtName.Focus();
}
else if(txtLastname.Text == "")
{
MessageBox.Show("Fill in Last Name", "Missing Data");
txtLastname.Focus();
}
else if(txtJobCode.Text == "" || txtJobCode.Text != "SEC" || txtJobCode.Text != "MGR" &&
txtJobCode.Text != "GEN")
{
MessageBox.Show("Fill in Job Code with SEC, MGR or GEN", "Missing Data");
txtJobCode.Focus();
}
else if(int.TryParse(txtStoreCode.Text, out storeCode) || txtStoreCode.Text == "")
{
if (storeCode <= 1 && storeCode >= 5)
{
MessageBox.Show("Fill in Store Code 1-5", "Missing Data");
txtStoreCode.Focus();
}
MessageBox.Show("Fill in Store Code", "Missing Data");
txtStoreCode.Focus();
}
else
{
this.eMPLOYEEBindingSource.EndEdit();
this.tableAdapterManager.UpdateAll(this.empDataSet);
}
}//end SaveChanges
答案 0 :(得分:1)
我假设您在
行收到错误消息else if(txtJobCode.Text == "" || txtJobCode.Text != "SEC" || txtJobCode.Text != "MGR" &&
txtJobCode.Text != "GEN")
{
MessageBox.Show("Fill in Job Code with SEC, MGR or GEN", "Missing Data");
txtJobCode.Focus();
}
原因是这永远不会评估为“假”&#39;并跳过声明,再加上你有一个&amp;&amp;对于GEN。一旦你成功地遇到了第一个||的任何一个声明你将失败&amp;&amp ;.它不能是GEN和GEN之一。让我们说你把GEN放进去了。
==&#34;&#34; (假)!=&#34; SEC&#34; (真)繁荣! (短信错误消息)
让我们说你把SEC
==&#34;&#34; (假)!=&#34; SEC&#34; (假)!=&#34; MGR&#34; (真)繁荣! (短信错误消息)
使用或运算符 || ,代码将继续检查 UNTIL ,它会找到 true 值。如果是这样,它会从该点返回 true ,并且不会进一步查看。因此,它读取if(true)..所以它执行if语句。
使用和运算符&amp;&amp; ,将继续检查 UNTIL ,它会找到 false 。如果是这样,它会返回 false ,并且不再查看。因此,它读取if(false)...并且不执行if语句。
现在当然没有||如果陈述是真的,它将返回false,如果没有&amp;&amp;值为false,它将返回true。
你需要写这个我相信:
如果jobCode ==&#34;&#34;或(jobCode!= SEC AND jobCode!= MGR AND jobCode!= GEN)然后ShowMessage()
现在键入SEC
==&#34;&#34; (假)|| (!= SEC(假)) - 结果错误......好!没有消息。
现在输入GEN
==&#34;&#34; (假)|| (!= SEC(true)&amp;&amp;!= MGR(true)&amp;&amp;!= GEN(false)) - 结果错误......好!没有消息。
现在输入&#34;&#34;
==&#34;&#34; (真)...好!我们收到了一条消息。
现在试试HELLO
==&#34;&#34; (假)|| (!= SEC(真)&amp;&amp;!= MGR(真)&amp;&amp;!= GEN(真))......好!我们收到了一条消息。
我还想补充一下if语句和多个和/或运算符的嵌套,尽管有时它不能完全避免,但这不是最干净的方法,因为即使自己查看它也需要我整理它的时刻。如果可能的话,我会重新编写该逻辑以便更好地使用,甚至在需要时将不同的测试放在他们自己的方法中并测试方法本身是否成功。任何使它更容易阅读和调试的东西。
为了简化它,使用那行代码,因为你有三个常量,只需检查它是否与它们相同。
您还可以向后查看范围,这将永远不会成立。它不能是&lt; = 1和&gt; = 5.
这里的清理应该有效;我会这样做的方式。 (没有经过测试,只是当场划伤。)即使您不想使用它,也许您可以更轻松地阅读并查看错误。更容易阅读使调试和管理变得更容易,所以我希望我能以多种方式帮助您。
public void SaveChanges()
{
var isValid = validateFirstName()
&& validateLastName()
&& validateJobCode()
&& validateStoreCode();
if (isValid)
{
this.eMPLOYEEBindingSource.EndEdit();
this.tableAdapterManager.UpdateAll(this.empDataSet);
}
}
private bool validateFirstName()
{
var isValidFirstName = !string.IsNullOrEmpty(txtName.Text);
if (!isValidFirstName)
{
MessageBox.Show("Fill in First Name", "Missing Data");
txtName.Focus();
}
return isValidFirstName;
}
private bool validateLastName()
{
var isValidLastName = !string.IsNullOrEmpty(txtLastname.Text);
if (!isValidLastName)
{
MessageBox.Show("Fill in Last Name", "Missing Data");
txtLastname.Focus();
}
return isValidLastName;
}
private bool validateJobCode()
{
var isValidJobeCode = txtJobCode.Text == "SEC"
|| txtJobCode.Text == "MGR"
|| txtJobCode.Text == "GEN";
if (!isValidJobeCode)
{
MessageBox.Show("Fill in Job Code with SEC, MGR or GEN", "Missing Data");
txtJobCode.Focus();
}
return isValidJobeCode;
}
private bool validateStoreCode()
{
var storeCode = 0;
var isValidStoreCode = int.TryParse(txtStoreCode.Text, out storeCode)
&& storeCode >= 1
&& storeCode <= 5;
if (!isValidStoreCode)
{
MessageBox.Show("Fill in Store Code 1-5", "Missing Data");
txtStoreCode.Focus();
}
return isValidStoreCode;
}
}