局部变量 - switch case

Local variables - switch case

我正在学习编程,我是初学者(2 个月前开始)。 我正在做数学计算的 c# 练习。我们的教授使用 if ... else(嵌入的)循环来做这个练习。我想使用 switch case,但我正在为局部变量而苦苦挣扎。

我理解这个问题:案例 2 和案例 3 不“知道”变量 totalNumber 和 nbrSubAssy 是因为它们来自案例 1 和案例 2,然后它们被检测为未分配。

如果我还想用switch case,有什么办法可以解决?

using System;

namespace Denombrements
{
    class Program
    {

        static long IntMultiplication(int startValue, int endValue)
        {
            long multiplication = 1;
            for (int k = startValue; k <= endValue; k++)
                multiplication *= k;
            return multiplication;
        }

        static int UserSelection(String message)
            {
                int number = 0;
                Console.Write(message);
                try
                {
                    number = int.Parse(Console.ReadLine());
                    Console.WriteLine();
                }

                catch
                {
                    Console.WriteLine();
                    Console.WriteLine("Wrong input, enter an integer");
                }

                return number;

            }

        static void Main(string[] args)
        {
            char choice = '1';
            while (choice != '0')
            {
                Console.WriteLine("Permutation ...................... 1");
                Console.WriteLine("Arrangement ...................... 2");
                Console.WriteLine("Combination ...................... 3");
                Console.WriteLine("Quit ............................. 0");
                Console.Write("Choice :                           ");
                choice = Console.ReadKey().KeyChar;
                Console.WriteLine();

                switch(choice)
                {  
                    case '0':
                        Environment.Exit(0);
                        break;
                    case '1':
                        int totalNumber = UserSelection("Total number of elements to be taken into account");
                        long permutation = IntMultiplication(1, totalNumber);
                        Console.WriteLine(totalNumber + "! = " + permutation);
                        break;
                    case '2':
                        int nbrSubAssy = UserSelection("Total number of elements in the subassy to be taken into account");
                        long arrangement = IntMultiplication(totalNumber - nbrSubAssy + 1, totalNumber);
                        Console.WriteLine("A(" + totalNumber + "/" + nbrSubAssy + ") = " + arrangement);
                        break;
                    case '3':
                        long combination = arrangement / IntMultiplication(1, nbrSubAssy);
                        Console.WriteLine("C(" + totalNumber + "/" + nbrSubAssy + ") = " + combination);
                        break;
                    default:
                        Console.WriteLine("Wrong input");
                        break;
                }
            }
            Console.ReadLine();
        }
    }
}

While 循环之前声明你的变量,它会在循环的整个生命周期中保留它的值,你可以访问旧值

char choice = '1';
int nbrSubAssy = 0;
int totalNumber = 0;
long arrangement = 0;

while (choice != '0')
 {
     // code ...
                
      switch (choice)
      {
         case '0':
              Environment.Exit(0);
              break;
          case '1':
              totalNumber = UserSelection("Total number of elements to be taken into account");
              long permutation = IntMultiplication(1, totalNumber);
              Console.WriteLine(totalNumber + "! = " + permutation);
              break;
           case '2':
              nbrSubAssy = UserSelection("Total number of elements in the subassy to be taken into account");
              arrangement = IntMultiplication(totalNumber - nbrSubAssy + 1, totalNumber);
              Console.WriteLine("A(" + totalNumber + "/" + nbrSubAssy + ") = " + arrangement);
              break;
            case '3':
               long combination = arrangement / IntMultiplication(1, nbrSubAssy);
               Console.WriteLine("C(" + totalNumber + "/" + nbrSubAssy + ") = " + combination);
                break;
             default:
                 Console.WriteLine("Wrong input");
                  break;
        }
   }

或者在我看来,更好的解决方案是您可以在任何需要的情况下询问价值