最开始讲解的数组操作就是遍历,存取数组中的所有数据(我觉着遍历可能是指取出所有数据)。遍历可以说是数组中所有操作的基础,为什么要介绍这么多数组操作。原因在于数组是一个存储n多数据的容器,我们对其中的数据做进一步地了解,比如最值,对数据进行排序等。借助数组这个容器,对n多数据进行一个操作。
数组中在装载n多数据时,是不会刻意排序的。
在求解最值时,对每一个数据取出来进行对比,取出所有的数据就是遍历。遍历过程中采用的技术是循环结构语句。
常见数组的操作有很多,但总的来看,是有一个清晰的脉络的,遍历→最值→排序。
这里补充一句,在众多操作中,主函数的思想都是一样的,输入确定的数组,调用特定的方法。
一.
我们重新对最值部分的内容进行一个讲解,重新梳理。
先对最值操作进行梳理。整体的流程如下:
上述说用数组调整元素位置求最值,就是类似于冒泡排序,调整到最后一个角标的数据就是最大值。
视频中正确的操作
两者之间对比一下,发现自己存在两个问题:一是思想上的错误,而是涉及数组方法的调用。主函数中,先要输入确定的数组,这样才能对数组进行一些,比如求数组中的最值,排序之类的操作。输入确定的数组,为了得出数组中的最大值直接调用最值功能函数。方法的格式在书写时,static修饰符+返回值类型+方法名+(形参类型和形参数目),这里形参是一个数组类型的数组。在之前的调用方法的()里,都是写入确定的常量,诸如add(3,4,5); 但是这里是写入数组的变量名,我尝试着写入 int max=maxget(int[] arry[]{.....})这样编译是错误的,编译器无法识别。在定义好了确定的数组后,当直接调用方法时,只需要输入数组变量名,方法就知道是对哪个数组进行操作。
在视频的思路中,讲解了自己不熟悉的两点:遍历和明确二。遍历目前的理解就是对数组中的所有数据进行操作(这里的说法是对的,遍历不能等于取出所有数据,遍历是对所有数据进行操作)。明确二说的是方法的输入,首先要知道是否有输入。如果有输入,那么输入的是什么,有几个,这里说的输入是通用的输入。
这里对于函数的明确二的说法都是技术层面的,要从思想的层面来解决问题,不然下次碰到方法的定义还是不会写。首先函数或方法是对特定功能的封装,例如这里封装的就是求解数组中数据最值的功能。也就是说如果函数封装了这个功能,那么调用这个函数,就会直接得到最值。还要说明地是这里封装的是获得数组数据的最值,而不是其他数据的最值,因此,同样是求最值功能,也分很多种方法(那有没有可能,这些方法之间相互调用?相互调用必须有严格的要求,只有参数类型相同才能调用(那形参个数不同时,该怎么调用?),否则就不行。)。换个形象的说法,这里方法封装了求数组中数据最值的功能,两个明确,一个是明确返回值,一个是明确形参,可以讲方法看成一个盒子,我们投入一个数组,得到一个最值。对这个盒子的使用有三种情况,有输入有输出,无输入有输出,有输入无输出。
二. 扩展
在上面的截图中,方法中最大值的初始化值是0,这样的解题只适合特定情况。求最值应该是数组中的数据间进行比较,初始化的最值也应该是数组中的数据。修改后的源代码如下:
这里强调一点,x<arr.length影响着循环的次数,所有右边的式子很重要。
如果坚持使用0作为初始化值,那就从角标的角度来解题。一个是直接得出最大值的数据,另一个是得出最大值所在的角标,当然无论是角标还是数据,返回值都是数据最大值。
自己写的这个是错误的,错在数据没有相互对比(核心的思想在于没有检查,只是凭借本能在操作),都是和0角标的数据对比,视频中的正确解法如下,
最大值的角标号为0,然后将数组中的其他数据和arr[0]对比,一旦有数据比arr[0]要大,那么就将其角标号赋值给max。两个思路for循环的角度不同,一个直接从数据入手,赋值数据,另一个从角标入手,赋值角标。原理在于,数据和角标是对应的,初始化数据或初始化角标都可以。
总结:本节是介绍一个思想,对数组中的数据求最值,数据的类型可以是很多种,不一定是int类型。