你量变量命名为更好highestIndex
为了解决你的代码,我可以看到两件事情你可以做:
1)。了解你当前的代码在做什么。尝试“桌面检查”。在纸上(或者在你的脑海里)发明一些这个功能的输入。
numbers = [ 2, 17, 4, 10]; amount = 3;
i = 1, is 1 <=3 ? yes, OK go into the body
diff = numbers[3] - numbers[1] which is 10 - 17, so diff is now -7
increment i, i = 2, is 2 <=3 ? yes, OK go into the body
diff = numbers[3] - numbers[2] which is 10 - 4, so diff is now 6
increment i, i = 3, is 3 <=3 ? yes, OK go into the body
diff = numbers[3] - numbers[2] which is 10 - 10, so diff is now 0
increment i, i = 4, is 3 <=3 ? no. so leave the loop
print diff ... hmmm it's 0 at the moment
这里的技巧是挑选一个小例子集,看看处理是否有意义。很明显,除非输入数组已经排序,否则无法找到范围,但在这种情况下,您需要循环,只需要减去数字[highestIndex]和数字[0]。 2)。现在你需要做什么?范围是列表中最大的数字和最小的数字之间的差异。因此,您的代码需要查看列表并找到最大和最小的数字。开始尝试这样
INITIALISE候选值,注意,这是正确的,如果你的列表只有一个成员,那么最大的和最小的是相同的,在列表中唯一的价值
float biggest = numbers[0];
float smallest = numbers[0];
然后通过循环看看其他数字是否大于或小于当前的最大值和最小值。
for (int i = 1; i <= highestIndex; i++) {
is numbers[i] bigger than biggest
set new biggest value
do the same sort of thing for smallest
}
print biggest - smallest
然后额外的信贷看,如果所有的数字为负,而会发生什么特殊情况,了解哪些值的浮动可容纳会发生什么。
C数组是零索引的。假设您使用'amount'的普通语义来表示数字中元素的数量,那么您的代码会读取数组的末尾。除此之外,为什么还要打扰循环呢?您在每次循环中覆盖'diff'。 –
有没有更好的方法去解决这个没有循环? – Jcmoney1010
你似乎认为数字是按排序的:最大的指数会保持最大的数字等等(还要注意卡尔所说的)而应该用循环来'找到'最大的&&最小的数字,这两者都需要只是一个临时变量。 –