如何判断列表中的数字是否按顺序排列

时间:2018-05-20 02:42:25

标签: c# list

我想首先说我不是想要用汤匙喂食,这是我目前正在上课的一项练习,但我无法弄清楚该为我的生活做些什么。我们必须有一个用户输入5个数字,并打印出这些数字是否按顺序排列。我还没有创建输入部分,但这只是因为我想弄清楚数字是否按顺序排在第一位。我知道代码有什么问题以及它为什么不能编译,我会显示我的代码,我会解释什么是错的,我的问题是我不知道#39;我不知道如何解决它。

class Program {
    static void Main(string[] args) {
        var numberList = new List<int>() { 5, 12 };
        var isConsecutive = true;

        for (int i = 0; i < numberList.Count; i++) {
            var first = numberList[i];
            int second = numberList[i + 1];

            if (!(first < second)) {
                isConsecutive = false;
                break;
            }
        }

        if (!isConsecutive) {
            Console.WriteLine("Not Consecutive");
        } else {
            Console.WriteLine("Is Consecutive");
        }

    }
}

我知道我无法做到

numberList[i + 1];

因为他们试图找到一个不存在的数字。我无法找到解决方法。

2 个答案:

答案 0 :(得分:2)

您需要考虑代码失败的原因。您试图将列表中的最后一个元素与下一个不存在的元素进行比较。这对于确定列表是否有序意味着什么?您已经将最后一个元素与之前的元素进行了比较,因此不需要将最后一个元素作为循环中比较的第一个元素包含在内。

因此,您只需更改for循环即可排除列表中的最后一个元素。您仍将比较具有以下元素的每个元素,以确保后续元素不低于或等于:

//  "numberList.Count - 1" so that you stop before the last element
for (int i = 0; i < numberList.Count - 1; i++) {

另一种选择是从元素1开始并转到最后一个元素并确保它们不低于或等于前一个元素:

// start at 1 so you compare all the other elements with the element before
for (int i = 1; i < numberList.Count; i++) {
    var first = numberList[i - 1];
    int second = numberList[i];
    if (!(first < second)) {
        isConsecutive = false;
        break;
    }
}

答案 1 :(得分:2)

您需要将循环的迭代次数减少一次。而不是

i < numberList.count 

你想要那个

i < numberList.count - 1 

因为你已经通过使用[i + 1]来计算numberList中的两个位置 另一种选择是用

开始循环
int i = 1 

并引用numberList.count,但对于第一个位置,请使用

numberList[i - 1]
相关问题