专题课:综合案例2
1查找元素在数组中的索引
细节优化
如果我们输入的元素是数组中第一个元素,如:19 第一次循环便找到了结果,就没有继续循环的必要了,否则浪费时间,所以加入break,优化代码
注意:这里不能把键盘录入写进方法里,因为我们把num作为形参了,形参必须要在主方法里赋值,即实参,如果方法里面定义了num就会重复变量而导致主方法无法赋值。
.
如果要将键盘录入写进方法,那num就不要作为形参 如图
2.查找元素在数组中的索引——考虑重复元素
前面的方法只能查询一次数组的索引,如果元素里面有重复的元素,那上面的方法就没有用了 如图
如果return可以返回多个值,那不就解决了问题嘛
但是return只能返回一个值,但我们可以转变思路
如果我们定义一个数组,用数组装入多个数,再返回数组不就可以了嘛 如图
但我们发现一个问题,数组肯定不能用静态初始化,但是动态初始化也不能确定,因为我们不知道每个重复元素有几个,如何才能根据重复元素的个数,动态改变数组的长度呢?
.
答:我们定义一个计时器变量,每循环找到一个重复元素,计时器就加1,然后把计时器放入数组长度里,这样不就可以根据重复元素个数动态改变数组长度了嘛
随之而来,又有一个问题,当我们的循环找到元素后,我们要将其放入数组,但是数组的索引该怎么确定?如果拿循环变量i作为数组索引,则会出现以下问题
循环第一个19时,循环的索引是0,恰好和我们装数的索引0号位置对上,
但循环到第二个19时,循环的索引是3,因为19只有3个,所以计时器只记录了3次,意味着装数的数组长度为3,根本没有3号索引,数组下标越界异常!
.
我们换个思路,我们无非想要装数的数组索引是0,1,2 那我们自己定义一个索引变量不就可以了吗,每装入一个数,变量就加1,下次装入的数的索引不就是1了吗,由此类推
.
注意!如此写法是错误的!
错误的原因在于,计时器。
我们应该先用一个循环确定好重复元素有几个,然后确定数组长度。
上图的写法,计时器初始为0,然后就放入数组里,这时数组的长度就被定义为0了,那不管你后面循环计时器加多少1都没用了!
.
正确写法:
完整写法: