c#分拣控制台输入阵列分拣系统损坏

c#分拣控制台输入阵列分拣系统损坏,c#,arrays,sorting,int,C#,Arrays,Sorting,Int,我一直在开发一个控制台应用程序,它从用户那里获取输入并将其转换为数组,然后对数组进行排序并显示给用户。问题是,它似乎只抓取了一半的数字并对它们进行了排序。而且它有时也无法获取“结束”输入,这会导致应用程序失败。为什么会发生这种情况 static void Main(string[] args) { List<Int64> userInts = new List<Int64>(); for (int i = 0; i <

我一直在开发一个控制台应用程序,它从用户那里获取输入并将其转换为数组,然后对数组进行排序并显示给用户。问题是,它似乎只抓取了一半的数字并对它们进行了排序。而且它有时也无法获取“结束”输入,这会导致应用程序失败。为什么会发生这种情况

    static void Main(string[] args)
    {

        List<Int64> userInts = new List<Int64>();
        for (int i = 0; i < 99; i++)
        {
            string userValue = Console.ReadLine();

            int userInt;
            if (int.TryParse(userValue, out userInt))
            {
                userInts.Add(userInt);
                if (Console.ReadLine().Contains("End"))
                {
                    break;
                }
            }

        }
        Int64[] Numbers = userInts.ToArray();
        var intList = new List<Int64>();
        intList.AddRange(Numbers);
        Console.WriteLine("De originele opsteling van nummers:");
        foreach (Int64 numb in intList)
            Console.Write("    {0}", numb);
        Console.WriteLine(Environment.NewLine);
        intList.Sort();
        Console.WriteLine("Lijst in gesorteerde ordening:  ");
        foreach (Int64 numb in intList)
            Console.Write("    {0}", numb);
        Console.WriteLine();
        Console.ReadKey();
    }
}
static void Main(字符串[]args)
{
List userInts=new List();
对于(int i=0;i<99;i++)
{
字符串userValue=Console.ReadLine();
int userInt;
if(int.TryParse(userValue,out userInt))
{
添加(userInt);
if(Console.ReadLine()包含(“End”))
{
打破
}
}
}
Int64[]Numbers=userInts.ToArray();
var intList=新列表();
intList.AddRange(数字);
控制台。WriteLine(“原版opsteling van nummers:”);
foreach(intList中的Int64 numb)
Write(“{0}”,numb);
Console.WriteLine(Environment.NewLine);
intList.Sort();
Console.WriteLine(“Gesorterde Ording中的Lijst:”);
foreach(intList中的Int64 numb)
Write(“{0}”,numb);
Console.WriteLine();
Console.ReadKey();
}
}

}

它将每隔一行忽略查找
End
,将该行移到嵌套的
if
块之外,以便处理输入的值

List<Int64> userInts = new List<Int64>();
for (int i = 0; i < 99; i++)
{
    string userValue = Console.ReadLine();
    if (userValue.Contains("End"))
    {
        break;
    }

    int userInt;
    if (int.TryParse(userValue, out userInt))
    {
        userInts.Add(userInt);
    }
}
  • 您不需要多个数组或列表,只需使用已有的
    userInts
    变量即可
  • 用于创建值字符串而不是循环
  • 无需将
    Environment.NewLine
    传递到
    Console.WriteLine()

您在循环中读取了两次,因此每秒只会在第一个或第二个读取行中捕获输入,从而导致您描述的行为

像这样的方法应该会奏效:

    for (int i = 0; i < 99; i++)
    {
        string userValue = Console.ReadLine();
        if (userValue.Contains("End"))
            {
                break;
            }
        int userInt;
        if (int.TryParse(userValue, out userInt))
        {
            userInts.Add(userInt);
        }
    }
for(int i=0;i<99;i++)
{
字符串userValue=Console.ReadLine();
if(userValue.Contains(“End”))
{
打破
}
int userInt;
if(int.TryParse(userValue,out userInt))
{
添加(userInt);
}
}
这将读一行。若它是“结束”,那个么它将停止程序,但若它是整数,那个么它将被丢弃


出于同样的原因,正如在
TryParse
if
条件中一样,它只会在之前解析过整数的情况下结束程序。

为什么要使用这么多列表?您可以使用一个:)

试试这个:

List<long> userInts = new List<long>();
for (int i = 0; i < 99; i++)
{
    string userValue = Console.ReadLine();

    if (userValue.Contains("End"))
        break;

    int userInt;

    if (int.TryParse(userValue, out userInt))
        userInts.Add(userInt);

}

// Print the unchanged numbers
Console.WriteLine("De originele opsteling van nummers:");
foreach (long numb in userInts)
    Console.Write("    {0}", numb);

Console.WriteLine(Environment.NewLine);
// Sorts the List
userInts.Sort();

// Output the sorted list
Console.WriteLine("Lijst in gesorteerde ordening:  ");
foreach (long numb in userInts)
    Console.Write("    {0}", numb);

Console.WriteLine();
Console.ReadKey();
List userInts=new List();
对于(int i=0;i<99;i++)
{
字符串userValue=Console.ReadLine();
if(userValue.Contains(“End”))
打破
int userInt;
if(int.TryParse(userValue,out userInt))
添加(userInt);
}
//打印未更改的数字
控制台。WriteLine(“原版opsteling van nummers:”);
foreach(userInts中的long numb)
Write(“{0}”,numb);
Console.WriteLine(Environment.NewLine);
//对列表排序
userInts.Sort();
//输出排序后的列表
Console.WriteLine(“Gesorterde Ording中的Lijst:”);
foreach(userInts中的long numb)
Write(“{0}”,numb);
Console.WriteLine();
Console.ReadKey();

TryParse将返回false,因为End不能转换为整数。
if (Console.ReadLine().Contains("End"))
{
    break;
}
List<long> userInts = new List<long>();
for (int i = 0; i < 99; i++)
{
    string userValue = Console.ReadLine();

    if (userValue.Contains("End"))
        break;

    int userInt;

    if (int.TryParse(userValue, out userInt))
        userInts.Add(userInt);

}

// Print the unchanged numbers
Console.WriteLine("De originele opsteling van nummers:");
foreach (long numb in userInts)
    Console.Write("    {0}", numb);

Console.WriteLine(Environment.NewLine);
// Sorts the List
userInts.Sort();

// Output the sorted list
Console.WriteLine("Lijst in gesorteerde ordening:  ");
foreach (long numb in userInts)
    Console.Write("    {0}", numb);

Console.WriteLine();
Console.ReadKey();