(这不是作业,只是我正在使用的书中的练习)
“如果它的因素包括,则整数被认为是一个完美的数字 一个(但不是数字本身),总和到数字。例如,6是 一个完美的数字,因为6 = 1 + 2 + 3.写法完美 确定参数值是否是完美数字。用这个 应用程序中确定并显示所有完美数字的方法 介于2和1000之间。显示每个完美数字的因子 确认这个数字确实很完美。“
问题在于它显示两次完美数字而不是一次。为什么要这样做?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Perfect_Numbers2
{
class Program
{
static bool IsItPerfect(int value)
{
int x = 0;
bool IsPerfect = false;
List<int> myList = new List<int>();
for (int i = value; i == value; i++)
{
for (int j = 1; j < i; j++)
{
if (i % j == 0) // if the remainder of i divided by j is zero, then j is a factor of i
{
myList.Add(j); //add j to the list
}
}
x = myList.Sum();
// test if the sum of the factors equals the number itself (in which case it is a perfect number)
if (x == i)
{
IsPerfect = true;
foreach (int z in myList)
{
Console.Write("{0} ",z);
}
Console.WriteLine(". {0} is a perfect number", i);
}
}
return IsPerfect;
}
static void Main(string[] args)
{
bool IsItAPerfectNum = false;
for (int i = 2; i < 1001; i++)
{
IsItAPerfectNum = IsItPerfect(i);
if (IsItPerfect(i) == true)
{
Console.ReadKey(true);
}
}
}
}
}
答案 0 :(得分:9)
您正在调用IsItPerfect
两次,这会导致它评估该方法中的代码两次。该方法将数字写入控制台,因此它会显示两次数字。
您可以按如下方式重写代码,这样可以消除问题并阻止您执行两次相同的逻辑:
static void Main(string[] args)
{
for (int i = 2; i < 1001; i++)
{
bool IsItAPerfectNum = IsItPerfect(i);
if (IsItAPerfectNum)
{
Console.WriteLine("{0} is a perfect number", i);
Console.ReadKey(true);
}
}
}
当然,请从Console.WriteLine
方法中删除相应的ItIsPerfect
。
答案 1 :(得分:4)
您正在拨打IsItPerfect(i)
两次,其中包含Console.WriteLine()
。您需要在IsItPerfect(i)
之前移除if
。我还建议完全从你的方法中删除用户界面 - 这是一种不好的做法。