今天汤阳光老师给我们讲递归实现与实现转换数据方法的不同效果!
用递归实现不同效果:
/**
* 要求打印如下效果:
*
* <pre>
* 传智播客
* 市场部
* 市场1部
* 市场2部
* 开发部
* 开发1部
* 开发2部
* </pre>
*/
package cn.itcast.oa.test;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.junit.Test;
import cn.itcast.oa.entities.Department;
public class WebTreeViewUtilsTest {
效果1:
/**
* 要求打印如下效果:
*
* <pre>
* 传智播客
* 市场部
* 市场1部
* 市场2部
* 开发部
* 开发1部
* 开发2部
* </pre>
*/
效果2:
/**
* 要求打印如下效果:
*
* <pre>
* ┠传智播客
* ┠市场部
* ┠市场1部
* ┠市场2部
* ┠开发部
* ┠开发1部
* ┠开发2部
*
* </pre>
*/
@Test
public void printAllDepts_1() {
List<Department> depts = findTopLevelDepartments();
for (Department dept : depts) {
printDeptInfo_1(dept);
}
}
// 打印出部门的信息
public void printDeptInfo_1(Department dept) {
// 1,名称
System.out.println(dept.getName());
// 2,子部门
for (Department d : dept.getChildren()) {
printDeptInfo_1(d);
}
}
/**
* 要求打印如下效果:
*
* <pre>
* ┠传智播客
* ┠市场部
* ┠市场1部
* ┠市场2部
* ┠开发部
* ┠开发1部
* ┠开发2部
*
* </pre>
*/
@Test
public void printAllDepts_2() {
List<Department> depts = findTopLevelDepartments();
for (Department dept : depts) {
printDeptInfo_2(dept, "");
}
}
public void printDeptInfo_2(Department dept, String prefix) {
// 1,名称
System.out.println(prefix + "┠" + dept.getName());
// 2,子部门
for (Department d : dept.getChildren()) {
printDeptInfo_2(d, prefix + " ");
}
}
/**
* 要求打印如下效果:
*
* <pre>
* ┠传智播客
* ┠市场部
* ┠市场1部
* ┠市场2部
* ┠开发部
* ┠开发1部
* ┠开发2部
*
* </pre>
*/
@Test
public void printAllDepts_3() {
List<Department> topLevelDepts = findTopLevelDepartments();
List<Department> allDepts = getAllDepts_3(topLevelDepts, "");
for (Department dept : allDepts) {
System.out.println(dept.getName());
}
}
// 返回当前所有部门及其子孙部门的集合
public List<Department> getAllDepts_3(Collection<Department> depts, String prefix) {
List<Department> list = new ArrayList<Department>();
for (Department dept : depts) {
dept.setName(prefix + "┠" + dept.getName());
list.add(dept);
List<Department> subDepts = getAllDepts_3(dept.getChildren(), prefix + " ");
list.addAll(subDepts);
}
return list;
}
// ---
@Test
public void printAllDepts_3_2() {
List<Department> topLevelDepts = findTopLevelDepartments();
List<Department> allDepts = new ArrayList<Department>();
preAllDepts_3_2(topLevelDepts, "", allDepts);
for (Department dept : allDepts) {
System.out.println(dept.getName());
}
}
public void preAllDepts_3_2(Collection<Department> depts, String prefix, List<Department> allDepts) {
for (Department dept : depts) {
dept.setName(prefix + "┠" + dept.getName());
allDepts.add(dept);
preAllDepts_3_2(dept.getChildren(), prefix + " ", allDepts);
}
}
// ---
/**
* @return 所有最顶层的部门的列表
*/
public static List<Department> findTopLevelDepartments() {
Department dept11 = new Department();
dept11.setId(11);
dept11.setName("市场1部");
Department dept12 = new Department();
dept12.setId(12);
dept12.setName("市场2部");
Department dept1 = new Department();
dept1.setId(1);
dept1.setName("市场部");
dept1.getChildren().add(dept11);
dept1.getChildren().add(dept12);
Department dept21 = new Department();
dept21.setId(21);
dept21.setName("开发1部");
Department dept22 = new Department();
dept22.setId(22);
dept22.setName("开发2部");
Department dept2 = new Department();
dept2.setId(2);
dept2.setName("开发部");
dept2.getChildren().add(dept21);
dept2.getChildren().add(dept22);
Department itcast = new Department();
itcast.setId(1000);
itcast.setName("传智播客");
itcast.getChildren().add(dept1);
itcast.getChildren().add(dept2);
List<Department> depts = new ArrayList<Department>();
depts.add(itcast);
return depts;
}
}
实现一个窗口选择后数据跑到另一个页面并自动关闭的例题:
main.html
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<!--
<script type="text/javascript" src="script.js"></script>
<link rel="stylesheet" type="text/css" href="style.css">
-->
<script type="text/javascript">
function openSelDept(){
var url="selDept.html";
window.showModalDialog(url,window,"dialogwidth:350px;dialogHeight:350px");
// var win= window.open(url,"selDept","menubar=no,toolbar=no");
//win.focus();
}
</script>
</head>
<body>
<form>
所属部门<input type="text" name="deptName" readonly="true"/>
<input type="button" value="选择部门" onclick="openSelDept()"/>
</form>
<script type="text/javascript">
</script>
</body>
</html>
<html>
<head>
<base target="_self"/>
<meta http-equiv="Content-Type" content="text/html; charset=GBK"/>
<!--
<script type="text/javascript" src="script.js"></script>
<link rel="stylesheet" type="text/css" href="style.css">
-->
<script type="text/javascript">
function selMe(deptName){
var mainWindow =window.dialogArguments;
mainWindow.document.forms[0].deptName.value=deptName;
// window.close();
}
</script>
</head>
<body>
<a href="javascript:selMe('市场部')"> 市场部</a>
<a href="javascript:selMe('开发部门')"> 开发部门</a>
</body>
</html>
分享到:
相关推荐
数据库开发基础、Microsoft SQLServer基础、SQL语言基础、索引、事务、SQL语言高级技术(空值处理、聚合与分组、数据分页、Union、日期函数、类型转换函数、流控函数、表连接、子查询、存储过程、触发器)、数据库...
1.常量与变量,数据类型,数据类型转换,数据输入与输出 2.C语言运算符,C语言操作符,C语言表达式,表达式优先级 3.C语言流程控制,分支,顺序,循环逻辑控制 4.函数概述与引用,简单递归,简单嵌套,C语言调用...
传智播客PHP就业班视频课程列表 8-11 1.html介绍 html运行原理① 8-11 2.html运行原理② html文件基本结构 html元素和属性 8-11 3.符号实体 url说明 超链接 发送电邮 8-11 4.图像 表格 实际应用-菜谱 课堂练习-课程...
传智播客PHP就业班视频课程列表 8-11 1.html介绍 html运行原理① 8-11 2.html运行原理② html文件基本结构 html元素和属性 8-11 3.符号实体 url说明 超链接 发送电邮 8-11 4.图像 表格 实际应用-菜谱 课堂练习-课程...
函数传递基本数据类型和数组方式 成员方法① 8-26 4.成员方法② 8-26 5.作业评讲 8-27 mysql1 8-27 mysql2 8-28 1.mysql 8-28 2.mysql 8-28 3.mysql 8-28 4.mysql 8-28 5.mysql 8-28 6.mysql 8-30 1.mysql 8-30 2....
传智播客PHP就业班视频课程列表 8-11 1.html介绍 html运行原理① 8-11 2.html运行原理② html文件基本结构 html元素和属性 8-11 3.符号实体 url说明 超链接 发送电邮 8-11 4.图像 表格 实际应用-菜谱 课堂练习-课程...
数据结构实验二叉树用递归实现先序遍历、中序遍历和后序遍历,用几种不同非递归方法实现了中序遍历,代码附有详细注释
04_字符串反转_方法2递归逆序(3个点)_传智扫地僧 05_考试题解答和项目开发代码书写手法 06_一级指针易错模型分析_重点 07_C语言中的const知识点总结 08_指针的输入和输出模型 09_课堂答疑_指针所指向内存释放 10_...
快速选择非递归与递归算法实现
ackman函数的递归和非递归,学习数据结构的素材,非递归是使用堆栈实现的。
快速排序 非递归实现方式的完整源代码和测试结果。
n后问题---递归回溯法 n后问题---递归回溯法 n后问题---递归回溯法 n后问题---递归回溯法 n后问题---递归回溯法 n后问题---递归回溯法 n后问题---递归回溯法 n后问题---递归回溯法 n后问题---递归回溯法 n后问题---...
阿克曼函数非递归实现,用到了堆栈,对于学习数据结构的人来说很有用
分别用递归和非递归方法实现二分查找算法 的完整程序,indexof()返回的是循环实现的二分法查找,getindex()实现的是递归算法实现的二分法查找。
汉诺塔的非递归实现,c++实现的,很简单,只有50多行,从递归的汉诺塔改编而来,将原来递归时的参数状态保存在栈中,入栈代替递归,出栈代替递归返回。
二叉树的原理的理论 二叉树的遍历方法和递归实现算法的实现
C#2.0纯数学方法递归实现货币数字转换中文C#2.0纯数学方法递归实现货币数字转换中文
实现树与二叉树的转换的实现。以及树的前序、后序的递归、非递归算法,层次序的非递归算法的实现,应包含建树的实现。
本文实例讲述了C++使用递归和非递归算法实现的二叉树叶子节点个数计算方法。分享给大家供大家参考,具体如下: /*求二叉树叶子节点个数 -- 采用递归和非递归方法 经调试可运行源码及分析如下: ***/ #include #...
汉诺塔-汉诺塔的非递归实现源码和原理讲解---从网上整理的