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);
}
}
确定这不是逻辑错误,而是运行调试时的性能问题。通过将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);
}
}