''进位-判断-执行''的通用思想
进位–判断–执行
这是我自己发明的一个规范,我觉得很方便实用,特意献给大家XD
什么意思捏?
每次写循环的时候,尤其是for循环(不是foreach)时,总是要考虑那个标志变量”i”到底从0开始还是从1开始,每次自增长是在循环前还是循环后,亦或是在中间位置,然后每次判断何时跳出循环的时候也要纠结一会.
问题就是这个思考的时间我觉得不值,应该像while循环那样直接想出代码.这个问题困到了多时直到java给了我灵感:
ResultSet.next()
首先是jdbc中resultset.next()函数,其中的标志变量,也就是上面说到的i,起始位置在第一行记录的前面一个,也就是第0行,每次调用这个函数,标志位进一个整数,然后判断这里行存不存在,如果存在则取出数据.
BufferedInputStream.readline(byte[])
然后是这个方法,常用于从字符文件中读取每一行,每次调用这个方法的时候读取的都是上一次读取行的下一行,因为和next()一样,这里也有用于判断的标志位,原理和上面一样.
所以总结出了这样一个
进位 – 判断 – 执行
的三部曲:对于循环的列表,标志位总是从第0个位置开始(这个位置是空的),然后每一次先进标志位,然后对于这个标志位所指向的条目进行判断是否溢出,因为如果这个位置已经超出列表,然后执行的话,很容易出现NullPointerException,或者出现更严重故障,所以先要拿这个标志指针来试探一下这一条是否合适,当然了,不仅是防止循环溢出,还有其他的业务逻辑需要对每一条记录判断类型再作出相应的操作,这样一来,标志位的作用就大了.最后执行相关的业务操作.
举两个栗子把:
JSP循环输出表格
规范的思考模型可以节省你很多时间,输出动态的table关键就是什么时候输出”tr”,有了以上的思维,我们可以给每一个td编号,从1开始递增,假如有5列,就是要在编号1,6,9,14之前和5,10,15,20之后输出tr标签,那么我们标志位i就要从0开始,以此类推,判断输出.
模拟鼠标点击任务
有时候我们想完成一些自动化的任务,但一时又找不到能够用于”开挂”的标准库,只能模拟外设操作啦,比如像依次点击windows或unix的资源管理器中的每一个文件,就需要进位判断执行的模型来控制鼠标的坐标,如果点错了位置后果可就难说了.
真的是不够聪明,才需要这种小技巧来提高效率…