所以,我尝试先使用输入制作数组,然后将其从最小到最大排序,然后显示要监视的数组。
所以我想出了这段代码:
4 yellow 5
3 green 2
1 green 1
5 red 4
2 red 3
但输出很奇怪: enter image description here
该函数成功地将数组从最小到最大排序,
但有两件奇怪的事情:
1.最大值元素(从我输入的内容为96,在排序后是第10个元素)从显示屏上消失。
2.出于某种原因,有值10,我没有在阵列上输入。
那么,发生了什么?
答案 0 :(得分:1)
在循环中
for(int j=0; j<stop; j++)
{
if(sortArray[j]>sortArray[j+1])
{
temp = sortArray[j+1];
sortArray[j+1] = sortArray[j];
sortArray[j]=temp;
}
}
stop
是数组的长度,您正在迭代j = 0 to stop - 1
的值。当j
到达stop - 1
时,j+1
的下一个元素将变为stop
(在本例中为10)。但由于数组的长度为10,sortArray[10]
不是数组的一部分,而是指内存中的其他对象,通常是垃圾值。在这种情况下,垃圾值为10。当您交换sortArray[10] and sortArray[9]
时,垃圾值将成为数组的一部分,而索引9处的值将离开数组。这种情况一直持续到外循环结束。
最终结果是除非垃圾值<数组中最大的元素,垃圾值被推入数组中,数组的最大值被放在sortArray[10]
,这不是数组的一部分。如果垃圾值大于数组的所有值,则可以在sortArray[10]
找到它,这也不是数组的一部分,您的代码将返回所需的结果。
基本上,你正在做的是给函数一个10(或stop
)元素的数组,但该函数实际上是使用11(或stop + 1
)元素的数组,最后一个元素是垃圾值。简单的解决方法是将循环的条件更改为j < stop - 1
。
请注意,如果您使用托管(或相对较高级别)的语言(如Java或C#)编写此代码,则会引发IndexOutOfBoundsException
。
答案 1 :(得分:0)
在索引9处,logbBookNums IN(12345,23456,56789)
logbBookNums IN(234)
logbBookNums IN(123)
超出范围。所以要解决这个问题,你只需要检查直到索引8
j+1
仔细查看内循环条件for(int counter = length-1; counter>=0; counter--)
{
for(int j=0; j<stop-1; j++)
{
if(sortArray[j]>sortArray[j+1])
{
temp = sortArray[j+1];
sortArray[j+1] = sortArray[j];
sortArray[j]=temp;
}
}
stop--;
}