使用随机数生成列表。排序和总和

时间:2015-11-25 19:10:41

标签: c#

我是编程新手,如果有人可以帮我解决以下问题,我会很高兴。 我有两种方法的问题。 首先将列表中的所有50个随机数加起来,第二个排序列表中包含50个随机数。 我知道当列表有四个数字{1,2,3,8}但没有50个随机数时如何做到这一点。

对这两种方法使用构造函数会很好,但我现在不知道怎么做。

非常感谢任何帮助。

class Class1
{
  var rand = new Random();

  public Class1( ) //  how to use a constructor ?


    public static List<double> TotalSum()
    {

        var alist = new List<double>();
        for (int i = 0; i < 50; i++)
        {
            alist.Add(rand.Next(10));
        }
        Console.WriteLine("Total sum:", alist);
    }

    public static List<double> Sort()
    {
        var slist = new List<double>();
        for (int i = 0; i < 50; i++)
        {
            slist.Sort(rand.Next(10));   // rand.Next does not work with Sort
            Console.WriteLine(slist);
        }
    }


    class Program
    {
        static void Main(string[] args)
        {
            Class1 show = new Class1(); 
            show.TotalSum();
            show.Sort();
        }
    }
}

4 个答案:

答案 0 :(得分:2)

  

只使用2种方法

list.Sum(); 
list.Sort();

我建议您使用rand.Next(Environment.TickCount)来获得更好的随机数,但最后需要使用不同的原始值来存储结果

class Program
{
    static void Main(string[] args)
    {
        var array = Class1.Sort();
        PrintArray(array);

        Console.WriteLine();

        Console.WriteLine("Total sum: {0}", Class1.TotalSum());

        Console.ReadLine();
    }

    static void PrintArray(List<double> array)
    {
        foreach (var a in array)
            Console.WriteLine(a);
    }
}

public class Class1
{

    public static double TotalSum()
    {
        var rand = new Random();

        var alist = new List<double>();
        for (int i = 0; i < 50; i++)
        {
            alist.Add(rand.Next(10));
        }

        return alist.Sum();
    }

    public static List<double> Sort()
    {
        var rand = new Random();

        var slist = new List<double>();
        for (int i = 0; i < 50; i++)
        {
            slist.Add(rand.Next(10)); // rand.Next does not work with Sort
        }

        slist.Sort();

        return slist;
    }
}

答案 1 :(得分:2)

我想我明白你的意思。你想要一个包含随机数字列表的类,你需要一些函数。

最好为您的班级提供更合适的名称。例如&#34; RandomList&#34;会好的。

您无法使用Console.WriteLine(list)打印列表项。您必须遍历项目并以您希望的方式打印它们。

您无法使用var来定义字段。你必须明确地写这个类型。

其他单词中的

static关键字为one for all instances。所以,如果你不使用静态,它将是one per instance。实例只是您使用构造函数创建的对象。最好将随机数生成器声明为静态,但其他方法和列表字段应保持非静态。

使用Linq Sum(),您可以从列表中获取所有项目的总和。如果您不想使用Linq,则必须遍历列表并将每个项目添加到值sum

我评论了解释事情的代码。

class Program
{
    static void Main(string[] args)
    {
        RandomList show = new RandomList(50, 10);
        show.TotalSum();
        show.Sort();
    }
}
class RandomList
{
    private static Random rand = new Random();

    private List<double> _list; // this field holds your list

    public RandomList(int length , int maxValuePerItem) // this is the constructor
    {
        _list = new List<double>(); 

        // populate list
        for (int i = 0; i < length; i++)
        {
            _list.Add(rand.Next(maxValuePerItem)); 
        }
    }

    public void TotalSum()
    {
        Console.WriteLine("Total sum: {0}", _list.Sum()); // {0} is required to specify the place to put _list.Sum() inside string.


        // without linq way
        // int sum = 0;
        // foreach(var i in _list) sum += i;
    }

    public void Sort()
    {
        _list.Sort();

        foreach (var d in _list) 
        {
            Console.Write(d + " , "); // you need to print this in the way you want.
        }
    }
}

答案 2 :(得分:0)

构造函数通常用于初始化某些值。在您的情况下,您应该使用它来初始化您的列表,也就是说,用50个随机数加载它。我们还将更改它,以便列表是类的属性。

请注意,这些方法不应该是静态的,因为它们是作用于类的属性。我们还使用了ListSum()Sort())的内置方法,而不是使用自己的方法。

class Class1
{
    var rand = new Random();
    var alist;

    public Class1() // constructor creates a new list and initializes it
    {
        alist = new List<double>();
        for (int i = 0; i < 50; i++)
        {
            alist.Add(rand.Next(10)); 
        }
    }


    public List<double> TotalSum()
    {
        Console.WriteLine("Total sum:", alist.Sum());
    }

    public List<double> Sort()
    {
        alist.Sort();   
        for (double num in alist)
        {
            Console.WriteLine(num.ToString());
        }

    }


    class Program
    {
        static void Main(string[] args)
        {
            Class1 show = new Class1();
            show.TotalSum();
            show.Sort();
        }
    }
}

答案 3 :(得分:0)

因为您询问了如何使用构造函数,所以我尝试以构造函数执行某些有用的方式重写代码。我添加了一个属性和一个局部变量以及另一个函数。

public class Class1
    {
        Random rand = new Random();
        List<double> alist { get; set; }

        public Class1(int howmany = 50)
        {
            alist = new List<double>();
            for (var i = 0; i < howmany; i++)
            {
                alist.Add(rand.NextDouble());
            }
        }

        public void Sort()
        {
            alist.Sort();
        }

        public void printTotalSum()
        {
            Console.WriteLine("Total sum: {0}", alist.Sum());
        }

        public void printList() {
            Console.WriteLine("The list contains:");
            for (int i = 0; i < alist.Count; i++)
            {
                Console.WriteLine(alist[i]);
            }
        }

    }

   class Program
    {
        static void Main(string[] args)
        {

            Class1 show = new Class1(10);
            show.printTotalSum();
            show.Sort();
            show.printList();
        }
    }