条件递增不正确
Conditional Incrementing Incorrectly
我的函数
int numSteepSegments(const int heights[], int arrSize) {
int mile = 0, steep_count = 0;
while (mile <= arrSize) {
int height = heights[mile];
int height_next = heights[mile + 1];
if ((height + 1000) < height_next) {
++steep_count;
} else if ((height - 1000) > height_next) {
++steep_count;
}
cout << heights[mile] << endl;
cout << steep_count << endl;
++mile;
}
return steep_count;
}
吐出的量 steep_count 是预期的两倍。
使用数组:
1200, 1650, 3450, 2800, 2900, 1650, 1140, 1650, 1200
,以及 arrSize = 9
,我错过了什么?
cout
是:
1200
0
1650
1
3450
1
2800
1
2900
2
1650
2
1140
2
1650
2
1200
3
1746942513
4
最后一个值是多少?它显然不在数组中,而且我看不到它属于我正在处理的数字附近的任何地方。我在我的条件语句中没有看到什么导致 steep_count
的错误增量?
C/C++ 数组是 zero-based。具有 arrSize
个元素的数组的索引范围从 0
到 arrSize-1
.
您的循环索引 mile
的范围从 0
到 arrSize
(含),因此 heights[mile]
正在离开数组的末尾。此外,您索引的 heights[mile+1]
会超出数组限制,即使您的索引被限制为 arrSize-1
.
试试:
- 将循环更改为从
0
到 arrSize-2
(含),或
- 将循环更改为从
1
到 arrSize-1
的范围,并使用 mile-1
作为第一个索引。
我的函数
int numSteepSegments(const int heights[], int arrSize) {
int mile = 0, steep_count = 0;
while (mile <= arrSize) {
int height = heights[mile];
int height_next = heights[mile + 1];
if ((height + 1000) < height_next) {
++steep_count;
} else if ((height - 1000) > height_next) {
++steep_count;
}
cout << heights[mile] << endl;
cout << steep_count << endl;
++mile;
}
return steep_count;
}
吐出的量 steep_count 是预期的两倍。
使用数组:
1200, 1650, 3450, 2800, 2900, 1650, 1140, 1650, 1200
,以及 arrSize = 9
,我错过了什么?
cout
是:
1200
0
1650
1
3450
1
2800
1
2900
2
1650
2
1140
2
1650
2
1200
3
1746942513
4
最后一个值是多少?它显然不在数组中,而且我看不到它属于我正在处理的数字附近的任何地方。我在我的条件语句中没有看到什么导致 steep_count
的错误增量?
C/C++ 数组是 zero-based。具有 arrSize
个元素的数组的索引范围从 0
到 arrSize-1
.
您的循环索引 mile
的范围从 0
到 arrSize
(含),因此 heights[mile]
正在离开数组的末尾。此外,您索引的 heights[mile+1]
会超出数组限制,即使您的索引被限制为 arrSize-1
.
试试:
- 将循环更改为从
0
到arrSize-2
(含),或 - 将循环更改为从
1
到arrSize-1
的范围,并使用mile-1
作为第一个索引。