需要一些关于C#中完美数字练习的帮助

本文关键字:数字 完美 练习 帮助 | 更新日期: 2023-09-27 18:29:45

(这不是家庭作业,只是我正在使用的书中的一个练习)

"如果一个整数的因子,包括一(但不是数字本身),求和到数字。例如,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);
        }

    }
}
}
}

需要一些关于C#中完美数字练习的帮助

您调用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);
        }
    }
}

当然,从ItIsPerfect方法中删除相应的Console.WriteLine

您正在调用IsItPerfect(i)两次,它包含一个Console.WriteLine()。您需要先删除IsItPerfect(i),然后再删除if。我还建议从你的方法中完全删除UI——这是一种糟糕的做法。