在自定义方法中为数组中的元素分配最小值 (array.Min())

Posted

技术标签:

【中文标题】在自定义方法中为数组中的元素分配最小值 (array.Min())【英文标题】:Assigning a minimum value (array.Min()) to an element in an array in a custom method 【发布时间】:2020-03-11 03:03:59 【问题描述】:

对于初学者来说,我对 C# 比较陌生,这是针对编程 1 类的。这是一个控制台应用程序。我必须使用两种自定义方法来允许用户在已分配 EX 的数组中输入最多 10 个值。 int[] numberArray = new int[10] 这是一个经过计算机测试的问题,否则我将刚刚定义数组并将长度设置为用户输入的条目数。在第一种方法中,您设置循环以允许用户输入 10 个值,或者如果输入了标记值 999,则退出循环。第二种方法显示输入值的统计信息(数组保存的值的数量、最小值、最大值、值的总和和平均值)。这是我为分配预定义参数的统计方法所拥有的,里面是我的代码:

public static void Statistics(int[] array, int els, out int high, out int low, 
    out int sum, out double avg)
        
    //set statistic values via the arguments
    els = count;
    high = array.Max();
    low = array.Min();
    sum = array.Sum();
    avg = array.Average();
    //output the statistics
    WriteLine("The array has 0 values", els);
    WriteLine("The highest value is 0", high);
    WriteLine("The lowest value is 0", low);
    WriteLine("The sum of the values is 0", sum);
    WriteLine("The average is 0", avg);

我发现的问题是,即使用户没有输入 10 个总值,最小值始终设置为 0。根据教授的建议,我尝试使用 for 循环来迭代 count 的值,即我用来分配输入值的数量。执行此操作时,低变量算作未分配(因为它是输出并且需要分配值)。我认为这是因为它在 for 循环中被视为局部变量。除了正确分配的最小值之外,其他所有内容都会检查,所以这是我的主要问题和关注的是,如果用户没有输入 10 个值,我将如何为其分配正确的最小值。如果用户确实输入了 10 个值,则最小值是正确的。作为旁注,我让 count 工作的方式是将其设置为 public 并在 main() 方法之外,以允许在 for 循环内分配它,并嵌套 if 语句以确定是否输入了哨兵值。 我主要认为统计方法是我的问题所在,但这是另一种方法的代码,以防万一可以进行改进,或者这就是问题所在。


    int x;
    string inputString;
    WriteLine("Enter an integer: ");

    for (x = 0; x < array.Length; ++x)
    
        inputString = ReadLine();
        //Will break the loop to continue to next method or line
        if (int.Parse(inputString) == 999)
        
            // count how many times we entered in data
            count = x;
            break;
        
        // will add input to array and continue until sentinel value is entered
        array[x] = int.Parse(inputString);
        WriteLine("Enter another integer: ");
    

    count = x;
    return x;

我只添加了 int = x,因为该方法需要返回一个 int,而我不确定如何使其工作。

【问题讨论】:

Max()、Min()、Sum()、Average() 都将使用声明的完整数组(10 个元素)。声明一个具有正确计数的新数组并将其作为参数传递,或者编写自己的数学函数来关注您的计数变量 【参考方案1】:

您还没有显示代码,但是您在创建数组的位置(可能大小为 10)会将该数组初始化为 10 个都等于 0 的东西。

如果您跟踪在该数组中放入了多少东西的计数,您可以这样做

array.Take(count).Min();

或者您可以在获得每个输入时动态增长数组(或者理想情况下,只使用通用列表)。但是,根据您的教授,您可以使用的内容可能会有不同的要求

【讨论】:

很遗憾,我们还没有学习列表。是的,就像你提到的那样,它正在将所有值初始化为 0。但是,这确实解决了我的问题,所以谢谢!可悲的是,这是通过计算机从我们教科书的在线部分进行评分的。这帮助我通过了从 65% 到 70% 的检查。 Cengage(在线文本的主机)需要特定的输出,但这是由于 array.Average();它看起来像。 酷,如果它回答了您的问题,请接受答案作为解决方案:)

以上是关于在自定义方法中为数组中的元素分配最小值 (array.Min())的主要内容,如果未能解决你的问题,请参考以下文章

如何在 PHP 中克隆对象数组?

我应该如何释放类型映射中为 argout 结构数组分配的内存?

AttributeError:'NoneType'对象没有属性'legendHandles',而在自定义图例中为每个标签手动分配颜色时

黑马基础阶段测试题:定义一个int类型的数组,数组中元素为{5,7,3,9,4}。求出数组中的最小值,并判断最小值是否为偶数,如果是偶数则输出“最小值为偶数”,如果不是偶数则输出“最小值为奇数”。打印

我可以从前面提到的实例变量中为初始化列表中的数组获取堆内存吗?

函数中的错误最小和最大分配