如何对输入值进行排序

Posted

技术标签:

【中文标题】如何对输入值进行排序【英文标题】:How to sort input values 【发布时间】:2014-11-05 22:00:34 【问题描述】:

我需要一个用户输入三个数字,然后我需要让程序写出从最大到最小的数字。

示例: 用户输入 16、3 和 45 输出将是:最大的数字是:45,中间的数字是:16,最小的数字是:3;

目前我将数字存储在不同的变量中,并使用 if、else if 语句来获取最大和最小,但我不知道如何使用 else if 来获取中间数字。

if (number1 <= number2
    && number1 >= number3 & number1 <= number3
    && number1 >= number2)

    middle = number1;

else if (number2 <= number1
    && number2 >= number3 & number2 <= number3
    && number2 >= number1)

    middle = number2;

else if (number3 <= number1
    && number3 >= number2 & number3 <= number2
    && number3 >= number1)

    middle = number3;

有可能吗?

我是否需要让用户将值输入到一个数组中,然后我需要对其进行排序,然后写出排序后的数组?

编辑:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Practise

    class Practise
    
        static void Main(string[] args)
        

            int[] newArray = new int[3];
            for (int i = 0; i < newArray.Length; i++)
            
                newArray[i] = Convert.ToInt32(Console.ReadLine());
            
            Array.Sort(newArray);
            int lowestNumber = newArray[0];
            int middle = newArray[1];
            int highest = newArray[2];

            Console.WriteLine("How can i only type out variables?" + highest + How can i only type out variables?" + middle + "How can i only type out variables?" + lowestNumber);
            Console.ReadLine();

        
    

数组排序有效,使用了 Selman22 的解决方案! 我需要在 Console.WriteLine() 中输入什么;只写出变量而不添加值。

> example:  highest = 15  middle = 10 lowestNumber = 5
> Console.WriteLine(highest + middle + lowestNumber); would do 15 + 10
> + 5 = 30. If i put "text" in between they obviously does not add up but what do I type to only get values out?

我真的很感谢所有的答案,这个网站真的很有帮助!

编辑:

Console.WriteLine(" " + highest + " " + middle + " " + lowestNumber);

除了在两者之间添加“”之外,还有其他写出变量值的方法吗? 如果我这样做了

Console.Writeline(highest, middle ,lowestNumber);

如果我把它说成一个错误,比如不能将最高值转换为字符串等。

【问题讨论】:

+1 有多少新手甚至向我们展示了他们尝试过的代码? 如果我没记错的话,有一个函数可以自动对数组进行排序。是的,使用数组会更容易。 @JohnSaunders,有趣的是没有一个答案试图修复 OP 的代码,而是从头开始提供新代码(变量名除外)。 @gunr2171 嗯? OP 专门询问了使用数组和排序的解决方案。 累积。对于您的最后一个问题(EDIT),您可以使用Console.WriteLine(" 0 1 2", highest, middle, lowestNumber);。但总的来说,您应该提出新问题。 【参考方案1】:

我是否需要让用户将值输入到一个数组中,然后我需要对其进行排序,然后写出排序后的数组?

是的,如果你这样做会简单得多。只需将用户输入存储到数组中然后对其进行排序

var numbers = new int[]  number1, number2, number3 ;

Array.Sort(numbers);

int lowestNumber = numbers[0];
int middle = numbers[1];
int highest = numbers[2];

如果您期望用户的输入超过三个,这可以很容易地扩展。

【讨论】:

【参考方案2】:

尝试使用数组或列表来存储所有数字。下面是一个示例,说明如何使用 Linq 对列表进行排序。

var myNumbers = new List<int>();
myNumbers.Add(45);
myNumbers.Add(14);
myNumbers.Add(30);
//etc
var sortedList = myNumbers.OrderBy(x => x).ToList();
//sortedList now contains a list of numbers in order from large to small.

var middleNumber = sortedList[1]; //get the second entry.

【讨论】:

只要得到中间的数字就可以了。 (不投票) 不错的尝试,但您的回答有一些错误。变量sortedList 实际上指向一个查询对象,该对象在枚举时将返回数字(按升序排列,与规范相反)。您不能在该对象上使用 [1] 索引器。不过你可以打电话给.ToList() :) 一开始我没有回答整个问题,因为这感觉很像一个家庭作业问题,我想在不喂他的情况下帮助他。 @DLeh 很公平。我最近出于同样的原因投了反对票。 这个标题让我相信他想做的只是排序:)【参考方案3】:

为了与众不同,我将提供一个不使用数组的答案,以便与使用数组有一些对比。还要回答“有没有可能”的问题(是的,是的)。

int minimum, middle, maximum; // Use whatever numerical type is appropriate here.

if( number1 < number2 )

    if( number2 < number3 )
    
        minimum = number1;
        middle = number2;
        maximum = number3;
    
    else if( number1 < number3 )
    
        minimum = number1;
        middle = number3;
        maximum = number2;
    
    else
    
        minimum = number3;
        middle = number1;
        maximum = number2;
    

else

    if( number1 < number3 )
    
        minimum = number2;
        middle = number1;
        maximum = number3;
    
    else if( number2 < number3 )
    
        minimum = number2;
        middle = number3;
        maximum = number1;
    
    else
    
        minimum = number3;
        middle = number2;
        maximum = number1;
    

【讨论】:

如果您采用 if 方式,那么在 if 链中进行“冒泡排序”会更具可读性。【参考方案4】:

这是使用不包含重复项的 SortedSet&lt;int&gt; 的另一种方法。但这无论如何都不是确定最小、中间和最大数量所必需的:

var numbers = new SortedSet<int>();
numbers.Add(16); numbers.Add(3); numbers.Add(45);
Console.WriteLine(" 0 1 2", 
    numbers.Max,                           
    numbers.ElementAt(1),// use numbers.Count/2 instead of 1 to determine the middle progr.
    numbers.Min);                         

【讨论】:

以上是关于如何对输入值进行排序的主要内容,如果未能解决你的问题,请参考以下文章

如何通过与输入单词相关的相似性对数组进行排序。

如何在 Spark 中对包含日期和时间值的列进行排序?

如何获取具有相同名称的元素并根据 XSLT 中的子节点值对它们进行排序

如何对Dictionary的值进行排序

如何对Dictionary的值进行排序

排序数字值 - 由点或任何其他分隔符分隔 - 对 RHEL5 中的版本值进行排序