所以分配如下:你可以输入各种数字但是当你连续两次输入0时它需要停止。第一次输入数字时,不允许输入0。
这是我设置的代码:
class MainClass
{
public static void Main (string[] args)
{
int givenNumber, prevNumber;
Console.WriteLine ("Enter a number: ");
int.TryParse (Console.ReadLine (), out givenNumber);
// I've set the prevNumber to givenNumber because the variable has to be initialized
// before I can use it in the condition below. I thought setting it to the giveNumber
// wouldn't harm. Note that the first time your not allowed to enter 0
prevNumber = givenNumber;
while (givenNumber != 0 && prevNumber != 0) {
prevNumber = givenNumber; //Here is where they both are 0 at a given moment, but only after the condition.
Console.WriteLine ("Enter a number: ");
int.TryParse (Console.ReadLine (), out givenNumber);
}
Console.WriteLine ("Tada");
}
}
问题是,当你只输入一个0时,它已经停止了。例如,如果我先输入一个7来开始,我的下一个数字将是0.当我调试它时,它说我的givenNumber是0并且prevNumber是7,当它返回到while条件时它停止并结束。当程序完成调试时,清楚地说prevNumber = 7和givenNumber = 0.我使用条件AND正确我不是吗?
有任何线索吗?我不允许在这个问题上使用数组。
提前致谢
答案 0 :(得分:2)
while ((givenNumber != 0) || (prevNumber != 0)) {
查找DeMorgan's laws以了解原因......
答案 1 :(得分:1)
您的问题在于您的条件声明。
现在你要检查givenNumber和PrevNumber是否都不等于0。
因此,如果它们都不等于0,则语句将评估为TRUE。但是,如果其中一个数字为0,则该语句将评估为FALSE,因为(TRUE)&& (FALSE)评估为FALSE。
有两种方法可以解决这个问题:您可以使用|| (" OR"运算符)与两个"!="陈述,或者你可以否定整个事情并使用正常的平等而不是"!="如此:!(givenNumber == 0&& prevNumber == 0)
答案 2 :(得分:0)
while(givenNumber!= 0&& prevNumber!= 0)
来自控制台的第一个读取值 - 编号7 给予努尔将是7 prevNumber也是7(因为赋值prevNumber = givenNumber;) 因此,虽然(7!= 0& 7!= 0)将通过
从控制台读取第二个 - 编号0 因此,(0!= 0& 7!= 0)将不会通过,因为0!= 0为FALSE,而如果条件为结果,则循环结束为FALSE