【问题标题】:Whats wrong with my "while" statement我的“while”语句有什么问题
【发布时间】:2012-11-22 16:19:18
【问题描述】:
int monthentered = 0;
int dayentered = 0;
int year = 0000;
int [] month = new int [12];
int [] day = new int [31];
bool leap = false;

for (int x = 0; x <= 11; x++)
{
    month[x] = x+1;
}

for (int x = 0; x <= 30; x++)
{
    day[x] = x+1;
}
Console.WriteLine("Please enter a year...");
year = (Convert.ToInt16(Console.ReadLine()));
Console.WriteLine("{0}", year);

Console.WriteLine("Please enter a month...");
monthentered = (Convert.ToInt16(Console.ReadLine()));

Console.WriteLine("Please enter a day...");
dayentered = (Convert.ToInt16(Console.ReadLine()));

while (monthentered == 01 || 03 || 05 || 07 || 08 || 10 || 12)
{
    while (dayentered == 31)
    {
        Console.WriteLine("There are only 30 days in this month please re-enter your day...");
        dayentered = (Convert.ToInt16(Console.ReadLine()));
    }
}

while (monthentered == 02)
{
    while (dayentered > 28)
    {
        Console.WriteLine("There are only 28 days in this month please re-enter your day...");
        dayentered = (Convert.ToInt16(Console.ReadLine()));
    }
}

Console.WriteLine("{0}/{1}/{2}", dayentered, monthentered, year);
Console.ReadKey();

while (monthentered == 01 || 03 || 05 || 07 || 08 || 10 || 12) 行有什么问题吗?我收到一个我不明白的错误。 "Operator '||' cannot be applied to operands of type 'bool' and 'int'"

请帮忙。

【问题讨论】:

  • 这不是你写这样一个 if 的方式。我假设您正在尝试相当于 if (montheentered == 01) or (monthentered == 02) or ...)?

标签: c# validation date


【解决方案1】:
while(monthentered == 01 || monthentered == 03 || monthentered == 05 || monthentered == 07 || monthentered == 08 || monthentered == 10 || monthentered == 12)

|| 之间的每一个操作并且 && 必须呈现为布尔值(即完整的测试),因为每个操作都是独立计算的

【讨论】:

    【解决方案2】:

    现在它类似于while(bool || int || int),我猜你想要这样的东西:

    while (monthentered == 1 || monthentered == 3 || monthentered == 5 /*|| ...*/)
    

    您每次都需要检查变量的值,所以它将是while(bool || bool || bool)

    您还可以创建有效月份的集合并检查输入的数字是否在其中。

    【讨论】:

      【解决方案3】:

      运算符“||”不能应用于“bool”和“int”类型的操作数

      您不能在数字上使用|| - 您使用|| 的每个部分都应该评估为bool

      条件应该是这样的:

      while (monthentered == 01 || 
             monthentered == 03 || 
             monthentered == 05 || 
             monthentered == 07 || 
             monthentered == 08 || 
             monthentered == 10 || 
             monthentered == 12)
      

      虽然更易读的选项是:

      var validMonths = new int[] { 1, 3, 5, 7, 8, 10, 12 };
      
      while(validMonths.Contains(monthentered))
      

      【讨论】:

        【解决方案4】:

        应该是

        while (monthentered  == 01 ||monthentered  == 03 || monthentered  ==05 || monthentered  ==07 || monthentered  ==08 || monthentered  ==10 || monthentered  ==12)
        

        【讨论】:

          【解决方案5】:

          您无法将intbool|| operator 进行比较。 monthentered == 01bool(true/false),其余的是 ints

          所以把while改成:

          int[] allAllowedMonths = new[]{ 1, 3, 5, 7, 8, 10, 12 };
          while (allAllowedMonths.Contains( monthentered ))
          {
              // ...
          }
          

          【讨论】:

            【解决方案6】:

            C# while 只接受真/假表达式!

            while (monthentered == 01 || monthentered ==03 || monthentered ==05 || monthentered ==07 || monthentered ==08 || monthentered ==10 || monthentered ==12) 
            

            【讨论】:

              【解决方案7】:

              应该是

              while (monthentered == 01 || 
                     monthentered == 03 || 
                     monthentered == 05 || 
                     monthentered == 07 || 
                     monthentered == 08 || 
                     monthentered == 10 || 
                     monthentered == 12)
              
               {  
                 //code here
               }
              

              【讨论】:

                【解决方案8】:

                这是繁琐的语法,但您需要将 while 语句编写为:

                while (monthentered == 01 || monthentered == 02 || monthentered == 3 ...等

                您的语句将首先评估布尔条件monthentered == 01,然后尝试在逻辑上或结果与其他整数,因此错误。

                不过,我会看看你想要做什么,看看 while 循环是否真的是你想要的。

                【讨论】:

                  【解决方案9】:

                  导致代码编译但不会工作的直接答案:您需要使用

                  (monthentered == 01 || monthentered == 03 || monthentered == 05 ||
                   monthentered == 07 || monthentered == 08 || monthentered == 10 ||
                   monthentered == 12)
                  

                  其他问题:

                  • 您的代码在大多数月份允许 32 天以上。
                  • 您在月份上的while 循环永远不会终止,因为您永远不会更改月份的值。请改用if 语句。

                  额外提示:您可以使用DateTime.DaysInMonth 来获取每个月和年允许的最大数字,而不是手动检查月数。这也将适应闰年。

                  【讨论】:

                  • 是吗?我已经看过了。你能指出我在哪里犯了这个错误吗?
                  • 例如,如果你的月份是 1,你只说“本月只有 30 天” if (dayentered == 31) 而不是 if (dayentered &gt;= 31)
                  • 非常感谢您的帮助。我是编程课程的新手,我正在努力掌握。向你寻求帮助。
                  • 不只是几个月的while循环......你必须用“if”来改变你所有的“while”子句。
                  • 不,dayentered while 循环没问题,因为 dayentered 在循环体中发生了变化。
                  猜你喜欢
                  • 2013-10-29
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2014-09-02
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多