ASP.. NET MVC应用:调试一个返回“true”的函数;如果输入的数字是一个快乐的数字使用列表vs哈希集在数组

本文关键字:一个 快乐的数字 数组 数字 输入 vs 如果 哈希集 列表 应用 MVC | 更新日期: 2023-09-27 18:06:04

所以我正在工作的MVC视图模型,将告诉用户如果给定的整数输入是一个快乐的数字或不是。如前所述,最终的代码将位于MVC视图模型中,但与此同时,我通过调试代码作为单独的控制台应用程序来检查逻辑。我已经让控制台应用程序工作,但是当我将代码迁移回视图模型然后在整个应用程序中进行调试时,实际上什么都没有发生,IIS最终超时请求。我的视图和控制器实现看起来很可靠(我现在省略了这些代码),所以我认为我在实际模型中搞砸了逻辑。想法吗?

详细说明的代码:我是OO编程的新手,所以为了我自己的理解,我把程序分成两个独立的函数(是的,我知道这是不好的做法,但这是家庭作业)。第一个函数(见下文),我称之为"sumPowered",它接受一个整数输入,将单个数字分隔成一个数组,将单个数字平方,然后返回平方和。接下来,我创建了一个名为"isHappy"的验证函数,在该函数中调用前面的sumPowered函数,传递参数,生成结果数组,并将它们与快乐数条件进行比较。

为了提供一个清晰的大纲,下面的第一个代码块是在我的控制台应用程序中出现的工作代码。第二个代码块演示了代码如何在视图模型中出现(不工作)。

EDIT:我应该澄清,当我运行MVC代码时,我不会在Chrome的属性检查器的控制台视图中产生任何构建错误或错误,但该功能不起作用。我已经找到了一个修复(答案张贴等待)。

控制台应用

  //CONSOLE APP
    namespace MoreCSharpPractice
    {
        class Program
        {
            static void Main(string[] args)
            {
                Console.WriteLine("Enter a number");
                int number = Convert.ToInt32(Console.ReadLine());
                isHappy(number);
            }
            public static int sumPowered(int num, int pow)
            {
                int sum = 0;
                List<int> numsL = new List<int>();
                while (num > 0)
                {
                    numsL.Add(num % 10);
                    num = num / 10;
                }
                int[] nums = numsL.ToArray();
                for (int a = 0; a < nums.Length; a++)
                {
                    sum += Convert.ToInt32(Math.Pow(Convert.ToDouble(nums[a]), Convert.ToDouble(pow)));
                }
                return sum;
            }
            //HAPPY NUMBER
            //return true if 'number' is a happy number.
            private static void isHappy(int number)
            {
                List<int> sumArray = new List<int>();
                bool running = true;
                while (running)
                {
                    int result = sumPowered(number, 2);
                    if (result == 1)
                    {
                        running = false;
                        Console.WriteLine("Is a Happy Number!");
                    }
                    else if (sumArray.Contains(result))
                    {
                        running = false;
                        //return false;
                        Console.WriteLine("Is not a Happy Number");
                    }
                    number = result;
                    sumArray.Add(result);
                }
                //return true;
                Console.ReadKey();
            }
        }
    }

MVC代码

//VIEW MODEL CODE: SUM POWERED FUNCTION
    public static int sumPowered(int num, int pow)
    {
        int sum = 0;
        List<int> numsL = new List<int>();
        while (num > 0)
        {
            numsL.Add(num % 10);
            num = num / 10;
        }
        int[] nums = numsL.ToArray();
        for (int i = 0; i < nums.Length; i++)
        {
            sum += Convert.ToInt32(Math.Pow(Convert.ToDouble(nums[i]), Convert.ToDouble(pow)));
        }
        return sum;
    }
    //VIEW MODEL CODE: HAPPY NUMBER FUNCTION
    //return true if 'number' is a happy number.
   private static bool isHappy(int number)
    {
        List<int> sumArray = new List<int>();
        while (true)
        {
            int result = sumPowered(number, 2);
            if (result == 1)
            {
                return true;
            }
            else if (sumArray.Contains(result))
            {
                return false;
            }
            number = result;
            sumArray.Add(result);
        }
   }

ASP.. NET MVC应用:调试一个返回“true”的函数;如果输入的数字是一个快乐的数字使用列表vs哈希集在数组

确定这不是逻辑错误,而是运行调试时的性能问题。通过将isHappy()函数中变量sumArray的数据类型从List更改为HashSet,我可以在调用else if (sumArray.Contains(result))时运行该函数,而不必遍历整个列表。

  //HAPPY NUMBER
        //return true if 'number' is a happy number.
       private static bool isHappy(int number)
        {
            HashSet<int> sumArray = new HashSet<int>();
            while (true)
            {
                int result = sumPowered(number, 2);
                if (result == 1)
                {
                    return true;
                }
                else if (sumArray.Contains(result))
                {
                    return false;
                }
                number = result;
                sumArray.Add(result);
            }
       }