需要帮助查找用户给定的3个值的中间值

本文关键字:中间 3个 帮助 查找 用户 | 更新日期: 2023-09-27 18:25:14

我正在复习老师给我的第一次四分之一决赛的复习,有一个问题我不记得老师复习过了。问题是"从用户那里获得3个值,计算并显示中间值",即10、20、30…20是中间值。到目前为止,我已经尝试了这个代码的迭代:

Console.WriteLine("Enter a value: ");
int value10 = int.Parse(Console.ReadLine());
Console.WriteLine("Enter another value: ");
int value11 = int.Parse(Console.ReadLine());
Console.WriteLine("Enter one last value: ");
int value12 = int.Parse(Console.ReadLine());
if (value10 > value11 && value11 > value12)
    Console.WriteLine("{0} is the middle value.", value11);
else if (value11 > value12 && value12 > value10)
    Console.WriteLine("{0} is the middle value.", value12);
else
    Console.WriteLine("{0} is the middle value.", value10);

我没有写过这部作品的版本。。。。WTF我失踪了吗?我一直在尝试不同的值组合,以及小于/大于符号的方向。我还尝试了ifif elseelse的不同变体。提前感谢您的帮助。

需要帮助查找用户给定的3个值的中间值

一个选项(也适用于许多元素)是对中间元素进行排序。

 var items = new[]{value10,value11, value12};
 Array.Sort(items);
 Console.Write(items[items.Length/2]);

如果输入总是三项,而您只需要第二项,为什么不将输入放入列表中,对其进行排序,然后选择第二个值?

List<int> inputList = new List<int>(); 
inputList.Add(int.Parse(Console.ReadLine()));
Console.WriteLine("Enter another value: ");
inputList.Add(int.Parse(Console.ReadLine()));
Console.WriteLine("Enter one last value: ");
inputList.Addint.Parse(Console.ReadLine()));
inputList.Sort();
Console.WriteLine("{0} is the middle value.", inputList[1])

编写程序的第一部分循环可能会更干净一些,直到您用想要的值填充了List<int>

const int itemCount = 3;
List<int> inputValues = new List<int>(itemCount);
while(inputValues.Count < itemCount)
{
    Console.WriteLine("Enter a value: ");
    int parsed; 
    if(int.TryParse(Console.ReadLine(), out parsed))
        inputValues.Add(parsed);
    else
        Console.WriteLine("Please try again!");
}

输入自然属于一个可以排序的集合,因此在输入的过程中以这种方式存储数据是有利的。(如果您喜欢处理无效条目并继续输入而不引发异常,那么使用int.TryParse()代替int.Parse()也是一个小步骤。上面的代码将继续询问值,直到它有三个值可以成功解析为止。)

List可以用它的.Sort()方法"就地"排序(不复制列表),列表的索引器可以用来查找中间项。

int middleIndex = (itemCount - 1) / 2;  // hopefully, your list has an odd number of elements!
inputValues.Sort();
int middleValue = inputValues[middleIndex];
Console.WriteLine(middleValue);

尽管它不是解决您的问题的最有效的解决方案,特别是对于较大数量的元素,但我仍然认为LINQ为您提供了一种强大的语法来订购IEnumerable元素:

int middleValue = inputValues.OrderBy(x => x).ElementAt(middleIndex);

在if语句中添加"OR"条件:

            if (value10 > value11 && value11 > value12 || value12 > value11 && value11 > value10)
            Console.WriteLine("{0} is the middle value.", value11);
        else if (value11 > value12 && value12 > value10 || value10 > value12 && value12 > value11)
            Console.WriteLine("{0} is the middle value.", value12);