java递归使用过程中的一点学习心得
来源:互联网 发布:九域神皇免费阅读 软件 编辑:程序博客网 时间:2024/06/03 08:11
小白程序员在写学生信息管理模块作业的时候用递归实现检验数据错误时重新调用本方法。写完测试代码的时候发现了一个问题。
主方法调用该静态方法执行删除操作
public static void deleteInfo(){ //递归记位器boolean flag = true; //用于标志是否查到要删除的idScanner sc = new Scanner(System.in);System.out.println("请输入正确的学号");String id = sc.next();//1.看该学号是否存在for(int i=0;i<studentNumbers;i++){if(students[i]!=null){if(students[i].getId().equals(id)){flag=false;break; //查到了就结束该方法}}}if(flag){System.out.println("不存在该学号\n---------");if(students[0]==null){function();}else{deleteInfo();}}//2.删除并补位for(int i=0;i<studentNumbers;i++){if(students[i]!=null){if(students[i].getId().equals(id)){students[i]=null; //让该位置引用为空,JVM自动回收内存信息//判断是否为最后一个位置if((i+1)!=studentNumbers){for(int j=0;j<(studentNumbers-(i+1));j++){ //删除位置后面的元素往前补students[i]=students[i+(j+1)]; //(J+1)表示i后面第几位students[i+(j+1)]=null;}}}}}System.out.println("\n---删除成功---");}
控制台的信息:
这里可以看到删除的语句打印了三次,这也就意味着,删除学生成绩的逻辑操作执行了3次。但是想要的只是让程序进行一次的删除操作。
学习了递归的相关知识后,发现原来递归方法,方法收敛后会从收敛处继续执行完代码后再返回上一层继续相同的操作。
解决方案:
我把deleteInfo()加上了一个int形参变为deleteInfo(int i)来标志递归方法调用目前处于哪一层。
这样就解决了递归过程中对同个数据的反复处理操作。
修改后的代码:
@param flag_index = 递归标志
public static void deleteInfo(int flag_index){ boolean flag = true; //用于标志是否查到要删除的idScanner sc = new Scanner(System.in);System.out.println("请输入正确的学号");String id = sc.next();//1.看该学号是否存在for(int i=0;i<studentNumbers;i++){if(students[i]!=null){if(students[i].getId().equals(id)){flag=false;break; //查到了就结束该方法}}}if(flag){System.out.println("不存在该学号\n---------");if(students[0]==null){function();}else{flag_index++; deleteInfo(flag_index);}}//递归方法在该位置终止继续进行程序if(flag_index>1){ //第一个方法该值为1return;}//2.删除并补位for(int i=0;i<studentNumbers;i++){if(students[i]!=null){if(students[i].getId().equals(id)){students[i]=null; //让该位置引用为空,JVM自动回收内存信息//判断是否为最后一个位置if((i+1)!=studentNumbers){for(int j=0;j<(studentNumbers-(i+1));j++){ //删除位置后面的元素往前补students[i]=students[i+(j+1)]; //(J+1)表示i后面第几位students[i+(j+1)]=null;}}}}}System.out.println("\n---删除成功---");}
阅读全文
0 0
- java递归使用过程中的一点学习心得
- ActiveMQ NMS使用过程中的一点经验
- 关于Java Primitive类型与内置Wrapper类型使用过程中的一点小总结
- java中的指针学习心得
- 关于java内存泄漏的一点学习心得
- 关于Eventbus使用过程中的一点点发现
- Java类加载过程中的一点小陷阱
- JAVA学习心得--JDBC使用
- C++中的递归过程
- java学习心得之--java中的修饰符
- (吐槽)一点学习心得。
- scanf的一点学习心得
- AChartEngine的一点学习心得
- 每天记录一点学习心得!
- SQLite的一点学习心得
- 存储过程在Java中的使用
- Android GPS定位(二)使用过程中的一点小坑
- J2ME学习过程中的一点心得整理(参考:java手机/PDA程序设计入门 王森)
- 如何将自己的项目上传到GitHub中的仓库之中
- 最小描述长度准则—Minimum Description Length
- HTTPS--使用wireshark观察SSL/TLS握手过程--双向认证/单向认证
- 分布式利器Zookeeper(二):分布式锁
- 【WLAN从入门到精通-基础篇】第11期——WLAN接入认证-Portal
- java递归使用过程中的一点学习心得
- zookeeper集群搭建
- GetFileSize 函数
- 数据结构和算法
- Linux下永久修改MAC地址和ifconfig命令总结(转)
- 分布式利器Zookeeper(三)
- eclipse设置默认编码格式为UTF-8
- 二元多项式(链表法)
- IntelliJ IDEA 2017 注册方法