我想首先说我不是想要用汤匙喂食,这是我目前正在上课的一项练习,但我无法弄清楚该为我的生活做些什么。我们必须有一个用户输入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];
因为他们试图找到一个不存在的数字。我无法找到解决方法。
答案 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]