虽然Loop不会遍历所有7个案例

时间:2014-02-05 01:33:31

标签: c# loops while-loop

我的案例1-3工作,但我不能工作4-7或不知道如何键入或接近它。

正如你在第4号中所看到的那样我编程所以当我运行程序并按4时它应该运行案例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();
            }
        }
    }
}

4 个答案:

答案 0 :(得分:7)

我们不能为你做堆栈溢出的功课。但是,我们可以指出您的逻辑问题。

查看案例四,我们看到了

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

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

你的if语句说“如果我的计数器等于7,那么将计数器增加(增加)一。”但是,您的计数器输入1,并且没有其他逻辑定义计数器的行为,因此没有任何反应!这个循环然后永远继续(哎呀!)。考虑到这一点,再试一次。

答案 1 :(得分:4)

以下是对第4号的一些建议,而不仅仅是编写解决方案:

  • 您的计数器从1开始,循环在counter <= 10时继续,但您只在counter == 7时递增。这看起来像是个问题吗?

  • 你在counter == 7时正在做某事,但实际上“7”是你想要做任何事情的唯一时间。

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

答案 2 :(得分:2)

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;
    }

答案 3 :(得分:2)

案例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。这可以通过以下方式实现:

  • 第一个奇数&gt; 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

我会把它转换成真正的语言,作为读者的练习。