昨天我们梳理了一维数组的基本概念、组成以及如何定义,今天我们就进入实例,通过不同的例子来加深对一维数组的理解。接下来我们通过4个例子,来整理一下一维数组的一些注意事项以及解题思路。
一、遍历数组
int[ ] arr = new int[ ]{1,8,15,6,2,43,37};
所谓遍历数组,就是将数组中的元素依次输出,整除情况下,我们通过System.out.print也是可以一个元素一个元素的数组,这是是不是比较麻烦,尤其是元素较多的情况下,显然没有办法使用这个办法,这个时候就可以通过for循环来输出
二、获取最大值,最小值
int[ ] arr = new int[ ]{1,8,15,6,2,43,37};
1.思路:可以看到这里定义了一个长度为7的int类型数组,目的是求最大值,既然是最大值,肯定是需要比较的,两两比较才能其中一个最大值,然后再将得到的最大值与第三个值比较,这样一直比到数组的最后一位,就可以得到最大值。两两比较这是一个重复的行为,因此可能是需要使用循环。
2.注意事项:
1)我们既然要比较,我们就可以假设一个元素为最大值,如果另一个元素比这个元素的值大,就将这个元素的值赋值给存储这个最大值的变量。
2)do-while,while,for循环,三个循环我们如何选择?根据使用区别,一般在知道循环范围的情况下,用for循环最好。
3)数组的长度如何定义?这里的例题中我们的长度是7,可以数出来,那么如果其他的数组元素有很多,我们还能一个一个数吗?显然不能。这里我们用下属这个式子代替数组的长度,比如上述的例题中,arr.length就是7。
数组名.length(arr.length)
接下来我们来看看具体的代码:
三、升序(冒泡排序)
int[ ] arr = new int[ ]{16,25,9,90,23};
升序就是将数组中的元素按照从小到大依次排序,意思就是要求原数组重新排列里面的元素,结果是
int[ ] arr = {9,16,23,25,90};
1.思路:我们可以每一次选择最大的一个数放在最后。
2.注意事项:
1)这里与之前的最大值相似但不同,求最大值只需要求出这个元素的值,而在这里需要将最大值放在最后一位,因此需要将元素的值进行互换,这就涉及到之前所说的如何将两个变量的值进行交换,借助一个空变量就可以实现。
2)注意这里的循环,这里不仅仅需要每一轮选择一个最大值,而选择最大值的这个过程是不是在不断的进行比较,因此这也是一个循环,每两两元素之间要依次进行比较,所以这里是一个嵌套循环,这就需要关注两个循环的初始值和循环条件。
这里我们就以第一轮为例:
第一次:16和25比较,后者数大,不用交换
第二次:25和9比较,前者数大,互换数据
第三次:25和90比较,后者数大,不用交换
第四次:90和23比较,前者数大,呼唤数据
由此可以看出第一轮需要进行四次比较,一旦前面的数比后面的数大,就要交换数据,第一轮选择完一个最大数据在最后之后,我们进行第二轮比较,第二轮由于只有4个数,因此只要比较三次,第三轮比较2次,第四轮比较1次,可以得出5个元素需要4轮。
这里涉及到嵌套for循环,我们之前通过双重for循环输出图形的时候,有说过内存循环控制列数,外层循环控制行数,外循环执行一次,内循环需要执行一遍。这里通过对比,我们是不是可以将外循环看成轮数,内循环看成每轮的次数,我们可以看出轮数和次数的关系是不是相加等于5,而这里的5是不是就是我们的数组长度,由此我们可以得到i和j之间的关系
四、插入(删除)数值
例题:有一组学员的成绩{99,85,82,63, 60},将它们按降序排列。要增加一个学员的成绩,将它插入成绩序列,并保持降序
1.思路:将设我们需要插入的成绩为83,这里通过比较我们是不是可以知道83应该放在数组中的第三个元素,而后将后面的数组元素依次向后移动一位即可
2.注意事项:
1)添加一位数组,数组的长度要增加1
2)需要得到插入位置,才能将该位置上的元素及之后的元素依次向后移动一位
3)需要将插入的数值进行赋值到插入位置上的元素
这里给大家留一个问题,为什么这里进行元素位置移动时是从后往前进行循环,而不是从前向后进行循环的呢?大家可以思考思考,下次为大家进行解答!同时,删除元素与增加元素相同,大家可以自己动手试试看。