【问题标题】:Max and Min in a loop for C#C# 循环中的最大值和最小值
【发布时间】:2021-11-27 02:11:40
【问题描述】:

我正在编写一个代码,询问用户“有多少标记?”然后他们输入他们提到的分数。然后打印出最大标记和最小标记。

            int MarkNumber;
            Console.Write("How many marks are there?: ");
            MarkNumber = Convert.ToInt32(Console.ReadLine());

            for (int SchoolM = 0; SchoolM < MarkNumber; SchoolM++)
            { 
                Console.Write("Input a Mark: ");
                Console.ReadLine();                   
            }

我不是最擅长编码,所以我不知道如何在循环中找到最大值和最小值。我起身到他们能够输入标记的部分,但我不确定如何找到最大值和最小值。我已经查找了如何计算最大值和最小值,但它通常显示为在数组中查找最大值和最小值,这不是我想要做的。

【问题讨论】:

  • 循环前:int currentMark; int min = 0; int max = 0;。循环内部:currentMark = Convert.ToInt32(Console.ReadLine()); if (currentMark &gt; max) max = currentMark; else if (currentMark &lt; min) min = currentMark;。或者,您可以将标记添加到列表中,然后计算最小值和最大值。
  • 旁注:在处理用户输入时,总是首选int.TryParse() 而不是Convert.ToInt32()
  • 哦,好吧,我会使用其他替代方案,但我仍然缺乏经验。谢谢!

标签: c# max min


【解决方案1】:

您应该使用变量一个来表示最大数量,另一个用于较小的数量

也许是这样的

 static void Main(string[] args) {

    {
        int MarkNumber;
        int iminor = -1;
        int imax = 0;
        Console.Write("How many marks are there?: ");
        MarkNumber = Convert.ToInt32(Console.ReadLine());

        for (int SchoolM = 0; SchoolM < MarkNumber; SchoolM++)
        { 
            Console.Write("Input a Mark: ");
            int mark = 0;
            do
            {
                var userInput = Console.ReadLine();
                if (!int.TryParse(userInput, out int i))
                {
                    Console.Write("Try again ");
                }
                else
                {
                    mark = i;
                    break;
                }                    
            } while (true);            
            if (mark > imax) imax = mark;
            if (mark < iminor) iminor = mark;
        }
        Console.WriteLine($" Minor Mark {iminor} Max Mark {imax}");
    }

【讨论】:

  • 我认为 minor 应该初始化为 Int32.MaxValue 否则如果所有标记都是正数,min 将始终为零。
  • 哦,是的,现在我想这样做对我来说更容易。感谢您的指导!
  • @carlos-cocom 你应该将imax 初始化为System.Int32.MinValueiminor 初始化为System.Int32.MaxValue。这样,脚本还可以处理作为有效整数的负数。而Convert.ToInt32() 可能会抛出异常,因此也应该处理它,要么将其包装在 try 块中,要么使用更具防御性的样式,例如 Int32.TryParse()
  • @ワイきんぐ 我理解,但在这种情况下,更简单的学习只是为了学习,好吧,或者你怎么看?
  • 如果用户只输入负数,你有imax 的错误,所以我肯定会修复它。 :) StackOverflow 也是关于发布其他人可能(阅读:将)复制粘贴的无错误代码。
猜你喜欢
  • 1970-01-01
  • 2019-03-12
  • 2022-09-29
  • 1970-01-01
  • 2011-03-27
  • 2016-06-07
  • 2016-10-06
  • 2018-09-21
  • 1970-01-01
相关资源
最近更新 更多