【问题标题】:While Loop doesn't loop through all 7 cases [closed]While Loop 不会遍历所有 7 个案例 [关闭]
【发布时间】:2014-02-05 01:33:30
【问题描述】:

我让案例 1-3 正常工作,但我无法让案例 4-7 正常工作,或者不知道如何输入或处理它。

正如你在数字 4 中看到的那样,我编写了程序,所以当我运行程序并按 4 时,它应该运行 case 4 倒计时到 10 但跳过 7 为什么它不起作用?也不知道怎么做5-7。

我还没有学到那么远,如果可以帮助我并解释你的代码如何为我解决问题,那真的很合适。

namespace WhileLoopExercises
{
    class Program
    {
        static void Main(string[] args)
        {
            int selection = 0;
            while (selection != 9)
            {
                Console.Clear();
                Console.WriteLine("\n\n Menu:\n");

                Console.WriteLine("\t 1. Display 10 stars( one per line)");
                Console.WriteLine("\t 2. Request a value 1 to 50 from user, then display");
                Console.WriteLine("\t 3. Display 10 rows of 3 stars");
                Console.WriteLine("\t 4. Add all values between 1 to 10 except 7");
                Console.WriteLine("\t 5. Display all the even numbers between 10 and 100");
                Console.WriteLine("\t 6. Add all the odd numbers bewteen 10 and 100");
                Console.WriteLine("\t 7. Generate 6 random numbers ranging from 1 to 49");
                Console.WriteLine("\t 8. Exit Apllication");

                Console.Write("Enter your selection: ");
                selection = int.Parse(Console.ReadLine());

                switch (selection)
                {
                    case 1:
                        {
                            int counter = 1;
                            while (counter <= 10)
                            {
                                Console.WriteLine("*");
                                counter++;
                            }
                        }
                        break;
                    case 2:
                        {
                            Console.Write("Enter integer 0-50 : ");
                            int N = int.Parse(Console.ReadLine());
                            int counter = 1;
                            while (counter <= N)
                            {
                                Console.Write("*");
                                counter++;
                            }
                        }
                        break;
                    case 3:
                        {
                            int counter = 1;
                            while (counter <= 10)
                            {
                                Console.WriteLine("***");
                                counter++;
                            }
                        }
                        break;
                    case 4:
                        {
                            int counter = 1;
                            while (counter <= 10)
                            {
                                if (counter == 7)
                                {

                                    counter++;
                                }
                            }
                        }
                        break;
                    case 5:
                        {
                            int counter = 1;
                            while (counter <= 100)
                            {

                            }
                        }
                        break;
                    case 6:
                        {
                        }
                        break;
                    case 7:
                        {


                        }
                        break;

                }// end of switch
                //pause
                Console.WriteLine("\n\nHit any key to coutinue");
                Console.ReadKey();
            }
        }
    }
}

【问题讨论】:

  • C# != C != C++。请选择适用于您的问题的语言标签,而不是随机抓取以第一个字母开头的语言标签。
  • 语法如此接近有什么关系?我的意思是 if 语句
  • 顺便说一句,如果这是作业,您可能需要将"\n\nHit any key to coutinue" 更正为"\n\nHit any key to continue" ;)
  • @davidbro 等等有什么不同?不,它不是家庭作业,而是一种练习:)
  • coutinue vs continue

标签: c# loops while-loop


【解决方案1】:

我们无法在堆栈溢出时为您完成作业。但是,我们可以指出您的逻辑问题。

看案例四,我们看到

                case 4:
                    {
                        int counter = 1;
                        while (counter <= 10)
                        {
                            if (counter == 7)
                            {
                                counter++;
                            }
                        }
                    }

现在解决问题。我们从计数器 1 开始,当它小于或等于 10 时,我们输入您的 if 语句。

您的 if 语句说“如果我的计数器等于 7,则将计数器增加(增加)1。”但是,您的计数器在 1 处输入,并且没有其他逻辑定义计数器的行为,所以什么也没有发生!然后这个循环永远持续下去(哎呀!)。考虑到这一点,再次尝试求解。

【讨论】:

  • 你怎么知道这是作业?这是每所学校的标准课程吗?如果用户实际上没有学到任何东西,一项成功的家庭作业真的很重要吗?
  • @RadioSpace 有许多上下文线索表明它是作业,包括命名空间'WhileLoopExercises',提到用户没有学到很多东西,以及它是一个设计明确的程序测试学生对 while 循环的理解。至于功课是否重要,如果人们愿意为他(或她)做作业,那有什么鼓励学生去尝试呢?在不直接提供答案的情况下,目标是鼓励学生学习材料,而不是仅仅在互联网上寻求答案。
  • 即使 stackoverflow 的好心人没有给用户答案。并且“学生”针对手头的主题进行了必要的研究。互联网仍然会给出答案。我个人希望看到人们说这不是一个可重用的问题。因为它对除了用户之外的任何人都没有用。特别是因为问题标题不会引导很多人回答有关 while 循环的问题。
  • 这不是硬件和锻炼我没有得到积分这样做我唯一获得的就是知识谢谢:)
【解决方案2】:

这里有一些关于数字 4 的建议,而不只是写解决方案:

  • 你的计数器从 1 开始,循环在 counter &lt;= 10 时继续,但你只在 counter == 7 时增加它。这看起来像个问题吗?

  • counter == 7 时你正在做某事,但实际上只有“7”是你不想做任何事情的时候。

  • 您需要创建另一个变量来存储“总和”,然后将每个值添加到其中。

【讨论】:

  • 哦,我的想法是当它达到 7 时,它会加 1,所以它自然会跳过它,哈哈
【解决方案3】:

案例 4 不会按原样工作,因为它只会在 counter 为 7 时增加。所以它会无限保持在 1。这应该有效(开头没有行号 - 它们用于下面的部分) :

1  int counter = 1;
2  int sum = 0;             // Need to maintain sum
3  while (counter <= 10) {  // Do all numbers 1 thru 10
4      if (counter != 7)    // Skip 7
5          sum += counter; 
6      counter++;
7  }
8  Console.Write (sum);

可以对所有其他情况采取类似的方法。您所要做的就是准确地弄清楚它在问什么并将其映射到代码中。尝试一些东西看看它是否有效,如果没有,请在你的脑海中运行代码以查看哪里出错了。在学习过程中,能够在脑海中模拟计算机是一项宝贵的学习技能。

坐下来用铅笔和纸依次运行每一行(行号与上面代码中的行号匹配)通常是有利的:

line | counter | sum | comment
-----+---------+-----+--------
   1 |       1 |   ? |
   2 |         |   0 |
   3 |         |     | 1 <= 10, will enter 'while'
   4 |         |     | 1 != 7, will enter 'if'
   5 |         |   1 |
   6 |       2 |     |
   7 |         |     | return to while loop start
   3 |         |     | 2 <= 10, will enter 'while'
   :

等等。


另一个将需求映射到代码的示例来自案例 6:Add all the odd numbers between 10 and 100。可以这样实现:

  • 第一个奇数> 10是11
  • 随后的每个奇数都比前一个多两个。
  • 循环直到大于100

这将导致以下伪代码:

set sum to 0
set num to 11
while num is less than or equal to 100:
    add num to sum
    add 2 to num
output sum

我将把它转换成真正的语言作为练习留给读者。

【讨论】:

  • 谢谢,你真的帮助了我,我感激不尽。
【解决方案4】:

Linq 让您能够以更紧凑、更易读的方式表达代码。

 case 4:
    Console.Write (Enumerable.Range(1,100).Where(v => v != 42).Sum());

如果您需要更多基本代码,请考虑使用 for 而不是 while,因为它以更惯用的方式表示范围内的迭代(而 continue 可能是您希望使用 4 来跳过数字的代码):

 case 4:
    {
    var sum = 0;
    for(var i = 1; i <= 20; i++)
    {
        if (i != 3) 
          continue;
        sum += 0;
    }
    break;
    }

【讨论】:

  • 这一定是我以前不知道的“可读”这个词的一些定义:-) 开个玩笑。
猜你喜欢
  • 1970-01-01
  • 2011-10-19
  • 1970-01-01
  • 2014-05-31
  • 2020-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-07
相关资源
最近更新 更多