编程方法学 - 公开课学习笔记(六)

时间:2023-02-04 23:10:56

第16课 数组 2011.8.1

介绍Array。int[] myArr=new int[5];可以是int,double这类变量也可以是对象。对于对象,数组存储对象的指针。对于int之流,分配空间,存储数值,但是要注意即使是这些基本类型,myArr实际是指向数组的指针,是不过每个entry不是存储对象的指针,而是实际的值。

出来使用new来创建数组,另一个方式是:int[] myArr={0,3,5,7,8};常用于定义某些常量。

post increment,例如x++,int x = 5; int  y = x ++结果是y=5(将x加一,但是返回原来的x值),采用pre increment,即++x,y==x,结果是y=6。要知晓分清,因为在数组中会用到。例如实际使用的size和定义分配的size可能不一致的时候(只确定MAX _SIZE),我们可能会使用while来替代for(当然应当用for,因为for不会出现超越边界的情况,更为安全,这里只是举例而已),例如myArr[num++]=100;是将100赋值给myArr[num],然后运行num++,而num保存当前处理的数目的多少。

Java中定义数组和c有一些区别,java的数组是带尺寸的属性(不是方法),例如上面的例子,可以用myArr.length来获取。

ArrayList:上面的方式,在定义时需对明确讲出数组的大小,在Java中给予一个类ArrayList,实现动态长度的数据,具体如何实现不清楚,但在C中有链表来实现相似的功能。定义方式:ArrayList<String> strlist=new ArrayList<String>();可以使用add,remove等,具体查reference。

第17课 多维数组和ArrayList 2011.8.2、3

多维数值int[][]之类的方式来进行定义。一般而言,最常用的一维数据,次则两维。

例如在ArrayList中,有某个方法是boolean add(<T> element),T就是template(模板)的type类型,反正都是T开头。介绍了ArrayList的method。要注意ArrayList中的T是Object,也就是我们不能将int,double之类作为它的元素,需要使用Integer,Double,将一个int赋值成为一个Interger,称为Boxing,例如,int x = 5; Integer y = new Integer(x);。取出值,称为unboxing,例如x = y.intValue();。在java中,box,unbox是系统可以自动完成。对于Integer是没有setValue()的类似的方式,也就是它只有一个值,而且是不可以改变,和String一样都是immutable。改变需生成一个新的Integer对象,这样使得Integer的形式更加接近int,在参数的传递中。

然则,我们需要注意,ArrayList<Integer>,如果某个单元的值需要加一,不能直接加一,需要set(index, get(index)+1);

Java对于多维数组的长度问题:int[][][] x=new int[3][4][5],那么x.length = 3,x[0].length=4, x[0][0].length=[5],所以Java和纬度数组如何理解各位的顺序需要注意,例如有100个学生,每个学生修行2门课程,设定一个2d数组来记录学生的成绩,int[][] x = new int[100][2],这样以学生为单位,int[][] x= new int[2][100],这样以课程为单位。不过其实都无所谓,只是我们需要了解length会返回那个值就可以了。

GImage可通过getPixelArray()方法获得int[][],对应每一个像素的,是一个RGB的int值,有点意思,记录下来。

第18课 多维数组和Debuging 2011.8.3

对于2D数值int x[2][100],可以看作有array是有2个元素的数值,每个元素是一个int[100]的数array,因此我们也可以理解x.length=2, x.length[0] = 100,对于多维数值,往下可以一级一级地分下去。x[3][4][5],x有3个元素,每个元素是一个[4][5]的数组,如是一维一维下去。

例如我们要扫描x[2][100],用一个for嵌套,i<x.length;j<x[0].length,一般我们不应直接写2和100,因为一旦修改x的size,程序需要做修改,这是非常糟糕的编程方式。

对于ArrayList的好处是动态大小,有多个方案可以调用,弱点是缺乏效率,语句繁复,如果我们知晓有固定的大小,一般情况应当使用array,而不是ArrayList。

调测是开发的很重要一个环境。Design是Architect,Coding-Engineer,Testing-Vandal,Debuging -Detective。对于程序,有4D步骤:Desing-》Development-》Debuging ->Deployment,某一步的错误,在下一步中会10倍的花费来fix。对于编程,通常错误会出现在:1、bad value;2、faulty logic、3、unwarranted assumptions,当出现错误时,产生错误的原因通常simple,在处理是要有条理,不要想当然地认为错误在哪里,如果那里没有,就需要到其他地方找找,编程要critical,可能错误只是一时疏忽,有错误不要恐慌(don't panic)。

对于调测,可以在使用println,在method之间之后打印,看看允许状态,可以打印一些变量值,看看是否符合我们预期,在Eclipse等工具都会有debuging的调测,设置breakpoint来配合跟踪。

相关链接:我的与编程思想相关的文章