首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >卡住在无限if回路上

卡住在无限if回路上
EN

Stack Overflow用户
提问于 2015-10-30 06:22:48
回答 5查看 127关注 0票数 5

我正在Visual 2015中为我的班级开发一个c#控制台dice实验室。根据用户的响应,我将我的程序分解为三个if循环。如果用户没有输入有效的响应,那么我有一个专用的do while循环。因为某种原因,我被困在那个圈子里,无法离开。最重要的是,因为它告诉用户输入一个有效的响应,所以它是第一个if语句。因此,即使输入"y“、"Y”、"N“或"n",它仍然初始化。这是有争议的部分。

代码语言:javascript
运行
复制
        // get response from user
        response = ReadLine();

        // loop starts if user does not reply with valid response in order to retrieve a valid response
        if (response != "N" || response != "Y" || response != "n" || response != "y")
        {
            do
            {
                WriteLine("Please reply with Y or N");
                response = ReadLine();
            }
            while (response != "N" || response != "Y" || response != "n" || response != "y");
        }

我使用的是or操作符,所以我不明白为什么它会以这样的方式循环。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2015-10-30 06:24:57

代码语言:javascript
运行
复制
response != "N" || response != "Y" || response != "n" || response != "y"

应该是

代码语言:javascript
运行
复制
response != "N" && response != "Y" && response != "n" && response != "y"

因为如果您按下有效的响应之一,则应该退出循环。

票数 2
EN

Stack Overflow用户

发布于 2015-10-30 06:25:45

您需要使用&&而不需要使用

代码语言:javascript
运行
复制
response != "N" && response != "Y" && response != "n" && response != "y"
票数 1
EN

Stack Overflow用户

发布于 2015-10-30 06:40:16

行为不当的直接原因是布尔运算符错误,您需要&& insetead of ||;您还可以将ifdo..while组合成while..do

代码语言:javascript
运行
复制
response = Console.ReadLine();

while (response != "N" && response != "Y" && response != "n" && response != "y") {
  WriteLine("Please reply with Y or N");
  response = Console.ReadLine();
}

下一步是将所有可能的响应放到一个集合中:

代码语言:javascript
运行
复制
  Dictionary<String, Boolean> expectedResponses = new Dictionary<String, Boolean>() {
    {"Y", true},
    {"y", true},
    {"N", false},
    {"n", false},
  };

  ...

  response = Console.ReadLine();

  while (!expectedResponses.ContainsKey(response)) {
    WriteLine("Please reply with Y or N");
    response = Console.ReadLine();
  }
  ...
  if (expectedResponses[response]) {
    // user said "yes"
  }
  else {
    // user said "no"
  } 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33429896

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档