From 657bcc142e1e0f6a8110cd822e5b837750d4d5d5 Mon Sep 17 00:00:00 2001 From: XMT-CN <542194147@qq.com> Date: Sun, 5 Mar 2017 20:50:09 +0800 Subject: [PATCH] myDataStructure --- group11/542194147/myDataStructure/.classpath | 8 + group11/542194147/myDataStructure/.gitignore | 1 + group11/542194147/myDataStructure/.project | 17 ++ .../src/com/coderising/array/ArrayUtil.java | 208 ++++++++++++++++++ .../com/coderising/array/ArrayUtilTest.java | 66 ++++++ .../coderising/litestruts/LoginAction.java | 39 ++++ .../src/com/coderising/litestruts/Struts.java | 94 ++++++++ .../com/coderising/litestruts/StrutsTest.java | 40 ++++ .../src/com/coderising/litestruts/View.java | 24 ++ .../src/com/coderising/litestruts/struts.xml | 11 + .../src/com/coding/basic/MyArrayList.java | 133 +++++++++++ .../src/com/coding/basic/MyLinkedList.java | 194 ++++++++++++++++ .../src/com/coding/basic/MyList.java | 34 +++ .../src/com/coding/basic/MyQueue.java | 19 ++ .../src/com/coding/basic/MyStack.java | 25 +++ 15 files changed, 913 insertions(+) create mode 100644 group11/542194147/myDataStructure/.classpath create mode 100644 group11/542194147/myDataStructure/.gitignore create mode 100644 group11/542194147/myDataStructure/.project create mode 100644 group11/542194147/myDataStructure/src/com/coderising/array/ArrayUtil.java create mode 100644 group11/542194147/myDataStructure/src/com/coderising/array/ArrayUtilTest.java create mode 100644 group11/542194147/myDataStructure/src/com/coderising/litestruts/LoginAction.java create mode 100644 group11/542194147/myDataStructure/src/com/coderising/litestruts/Struts.java create mode 100644 group11/542194147/myDataStructure/src/com/coderising/litestruts/StrutsTest.java create mode 100644 group11/542194147/myDataStructure/src/com/coderising/litestruts/View.java create mode 100644 group11/542194147/myDataStructure/src/com/coderising/litestruts/struts.xml create mode 100644 group11/542194147/myDataStructure/src/com/coding/basic/MyArrayList.java create mode 100644 group11/542194147/myDataStructure/src/com/coding/basic/MyLinkedList.java create mode 100644 group11/542194147/myDataStructure/src/com/coding/basic/MyList.java create mode 100644 group11/542194147/myDataStructure/src/com/coding/basic/MyQueue.java create mode 100644 group11/542194147/myDataStructure/src/com/coding/basic/MyStack.java diff --git a/group11/542194147/myDataStructure/.classpath b/group11/542194147/myDataStructure/.classpath new file mode 100644 index 0000000000..ddd63c6d08 --- /dev/null +++ b/group11/542194147/myDataStructure/.classpath @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/group11/542194147/myDataStructure/.gitignore b/group11/542194147/myDataStructure/.gitignore new file mode 100644 index 0000000000..ae3c172604 --- /dev/null +++ b/group11/542194147/myDataStructure/.gitignore @@ -0,0 +1 @@ +/bin/ diff --git a/group11/542194147/myDataStructure/.project b/group11/542194147/myDataStructure/.project new file mode 100644 index 0000000000..56bfc21f79 --- /dev/null +++ b/group11/542194147/myDataStructure/.project @@ -0,0 +1,17 @@ + + + myDataStructure + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/group11/542194147/myDataStructure/src/com/coderising/array/ArrayUtil.java b/group11/542194147/myDataStructure/src/com/coderising/array/ArrayUtil.java new file mode 100644 index 0000000000..7512dac816 --- /dev/null +++ b/group11/542194147/myDataStructure/src/com/coderising/array/ArrayUtil.java @@ -0,0 +1,208 @@ +package com.coderising.array; + +import java.util.Arrays; + +/** + * Array集合工具类 + * @author 小摩托 + * + */ +public class ArrayUtil { + + /** + * 给定一个整形数组a , 对该数组的值进行置换 + 例如: a = [7, 9 , 30, 3] , 置换后为 [3, 30, 9,7] + 如果 a = [7, 9, 30, 3, 4] , 置换后为 [4,3, 30 , 9,7] + * @param origin + * @return + */ + public int[] reverseArray(int[] origin){ + if(origin.length==0){ + throw new RuntimeException("数组为空"); + } + int[]exchange=new int[origin.length]; + for(int i=origin.length-1;i>=0;i--){ + exchange[origin.length-1-i]=origin[i]; + } + return exchange; + } + + /** + * 现在有如下的一个数组: int oldArr[]={1,3,4,5,0,0,6,6,0,5,4,7,6,7,0,5} + * 要求将以上数组中值为0的项去掉,将不为0的值存入一个新的数组,生成的新数组为: + * {1,3,4,5,6,6,5,4,7,6,7,5} + * @param oldArray + * @return + */ + + public int[] removeZero(int[] oldArray){ + int exchange[]={}; + for(int i=0;i parameters) { + + /* + 0. 读取配置文件struts.xml + + 1. 根据actionName找到相对应的class , 例如LoginAction, 通过反射实例化(创建对象) + 据parameters中的数据,调用对象的setter方法, 例如parameters中的数据是 + ("name"="test" , "password"="1234") , + 那就应该调用 setName和setPassword方法 + + 2. 通过反射调用对象的exectue 方法, 并获得返回值,例如"success" + + 3. 通过反射找到对象的所有getter方法(例如 getMessage), + 通过反射来调用, 把值和属性形成一个HashMap , 例如 {"message": "登录成功"} , + 放到View对象的parameters + + 4. 根据struts.xml中的 配置,以及execute的返回值, 确定哪一个jsp, + 放到View对象的jsp字段中。 + + */ + View view=new View(); + try { + SAXReader sr=new SAXReader(); + Document document= sr.read(new File("src/com/coderising/litestruts/struts.xml")); + Element root=document.getRootElement(); + List actions=root.elements("action"); + for(Iterator it=actions.iterator();it.hasNext();){ + Element action =it.next(); + if(action.attribute("name").getText().equals(actionName)){ + LoginAction loginAction=(LoginAction)Class.forName( + action.attribute("class").getText()).newInstance(); + loginAction.setName(parameters.get("name")); + loginAction.setPassword(parameters.get("password")); + String loginMsg=loginAction.execute(); + if(loginMsg.equals("success")){ + Listresults=action.elements("result"); + for(it=results.iterator();it.hasNext();){ + Element result=it.next(); + if(result.attribute("name").getText().equals("success")){ + createView(view, loginAction, result); + } + } + } + if(loginMsg.equals("fail")){ + Listresults=action.elements("result"); + for(it=results.iterator();it.hasNext();){ + Element result=it.next(); + if(result.attribute("name").getText().equals("fail")){ + createView(view, loginAction, result); + } + } + } + if(loginMsg.equals("error")){ + Listresults=action.elements("result"); + for(it=results.iterator();it.hasNext();){ + Element result=it.next(); + if(result.attribute("name").getText().equals("error")){ + createView(view, loginAction, result); + } + } + } + } + } + } catch (Exception e) { + System.out.println("have exception:"+e); + e.printStackTrace(); + } + return view; + } + + private static void createView(View view, LoginAction loginAction, Element result) { + Map msgMap=new HashMap(); + msgMap.put("message", loginAction.getMessage()); + view.setParameters(msgMap); + view.setJsp(result.getText()); + } + +} diff --git a/group11/542194147/myDataStructure/src/com/coderising/litestruts/StrutsTest.java b/group11/542194147/myDataStructure/src/com/coderising/litestruts/StrutsTest.java new file mode 100644 index 0000000000..7fa9e9a4e5 --- /dev/null +++ b/group11/542194147/myDataStructure/src/com/coderising/litestruts/StrutsTest.java @@ -0,0 +1,40 @@ +package com.coderising.litestruts; + +import java.util.HashMap; +import java.util.Map; + + +import org.junit.Assert; +import org.junit.Test; + +public class StrutsTest { + + @Test + public void testLoginActionSuccess() { + + String actionName = "login"; + + Map params = new HashMap(); + params.put("name","test"); + params.put("password","1234"); + + + View view = Struts.runAction(actionName,params); + + Assert.assertEquals("/jsp/homepage.jsp", view.getJsp()); + Assert.assertEquals("login successful", view.getParameters().get("message")); + } + + @Test + public void testLoginActionFailed() { + String actionName = "login"; + Map params = new HashMap(); + params.put("name","test"); + params.put("password","123456"); //密码和预设的不一致 + + View view = Struts.runAction(actionName,params); + + Assert.assertEquals("/jsp/showLogin.jsp", view.getJsp()); + Assert.assertEquals("login failed,please check your user/pwd", view.getParameters().get("message")); + } +} diff --git a/group11/542194147/myDataStructure/src/com/coderising/litestruts/View.java b/group11/542194147/myDataStructure/src/com/coderising/litestruts/View.java new file mode 100644 index 0000000000..610ce0d092 --- /dev/null +++ b/group11/542194147/myDataStructure/src/com/coderising/litestruts/View.java @@ -0,0 +1,24 @@ +package com.coderising.litestruts; + +import java.util.Map; + +public class View { + + private String jsp; + private Map parameters; + + public String getJsp() { + return jsp; + } + public View setJsp(String jsp) { + this.jsp = jsp; + return this; + } + public Map getParameters() { + return parameters; + } + public View setParameters(Map parameters) { + this.parameters = parameters; + return this; + } +} diff --git a/group11/542194147/myDataStructure/src/com/coderising/litestruts/struts.xml b/group11/542194147/myDataStructure/src/com/coderising/litestruts/struts.xml new file mode 100644 index 0000000000..e5d9aebba8 --- /dev/null +++ b/group11/542194147/myDataStructure/src/com/coderising/litestruts/struts.xml @@ -0,0 +1,11 @@ + + + + /jsp/homepage.jsp + /jsp/showLogin.jsp + + + /jsp/welcome.jsp + /jsp/error.jsp + + \ No newline at end of file diff --git a/group11/542194147/myDataStructure/src/com/coding/basic/MyArrayList.java b/group11/542194147/myDataStructure/src/com/coding/basic/MyArrayList.java new file mode 100644 index 0000000000..fbede89fa1 --- /dev/null +++ b/group11/542194147/myDataStructure/src/com/coding/basic/MyArrayList.java @@ -0,0 +1,133 @@ +package com.coding.basic; + +import java.util.Iterator; + +public class MyArrayList implements MyList { + + /** + * 数组默认大小 + */ + private static final int DEFAULT_SIZE = 10; + /** + * 储存元素的数组 + */ + private Object[] elementData =null; + /** + * 数组大小指针; + */ + private int capacity; + /** + * 当前游标 + */ + private int current; + + public MyArrayList(int size){ + if(size<0){ + throw new RuntimeException("大小不能小于0"); + }else{ + this.elementData= new Object[size]; + this.current=0; + this.capacity=size; + } + } + + public MyArrayList(){ + this(DEFAULT_SIZE); + } + + @Override + public void add(Object o) { + isOverSize();//判断数组容量是否满足,不满足增加空间 + this.elementData[current]=o; + this.current++; + } + + @Override + public void add(int index, Object o) { + isOverSize();//判断数组容量是否满足,不满足增加空间 + isOutOfBoundIndex(index);//判断数组下标是否越界 + System.arraycopy(elementData, index, elementData, index+1, this.elementData.length-index); + this.current++; + } + + @Override + public Object get(int index) { + isOutOfBoundIndex(index);//判断数组下标是否越界 + return this.elementData[index]; + } + + @Override + public Object remove(int index) { + isOutOfBoundIndex(index);//判断数组下标是否越界 + Object o=this.elementData[index]; + if(this.elementData.length>index+1){ + System.arraycopy(elementData, index+1, elementData, index,this.elementData.length-index-1); + } + this.elementData[this.elementData.length-1]=null; + return o; + } + + public Iterator iterator(){ + return new MyArrayListIterator(); + } + + @Override + public int size() { + return this.elementData.length; + } + + /** + * 判断数组容量是否满足,不满足增加空间 + */ + private void isOverSize() { + if(this.current==this.capacity){ + this.capacity+=MyArrayList.DEFAULT_SIZE; + } + Object[]newElementData=new Object[this.capacity]; + for(int i=0;ithis.capacity||index<0){ + throw new RuntimeException("数组下标越界"); + } + } + + /** + * MyArrayList的迭代器 + * @author 小摩托 + * + */ + private class MyArrayListIterator implements Iterator{ + + private int current=0; + + @Override + public boolean hasNext() { + return currentsize||index<0){//检查下标是否越界 + throw new RuntimeException("下标越界"); + } + if(index==this.size){ + addLast(o);//插到队尾 + }else{ + Node l= node(index); + addBeforeNode(o,l);//插到指定下标节点之前 + } + } + + @Override + public Object get(int index) { + if (index >= size || index < 0) { + throw new RuntimeException("下标越界"); + } + return node(index).data; + } + + @Override + public Object remove(int index) { + if (index >= size || index < 0) { + throw new RuntimeException("下标越界"); + } + Node l=node(index); + Node prevNode=l.prev; + Node nextNode=l.next; + if(prevNode==null){ + head=nextNode; + }else{ + prevNode.next=nextNode; + + } + if(nextNode==null){ + last=prevNode; + }else{ + nextNode.prev=prevNode; + } + l.prev =null; + l.next=null; + l.data=null; + return l.data; + } + + @Override + public int size() { + return size; + } + + /** + * 获取对应节点的下标 + * @param element + * @return + */ + public int indexOf(Object element) { + Node current = head; + int count = 0; + while (current != null) { + if (element != null) { + if (element.equals(current.data)) { + return count; + } + }else{ + if (current.data == null) { + return count; + } + } + count ++; + current = current.next; + } + return -1; + } + + /** + * 添加到对应下标的节点之前 + * @param o + * @param theNode + */ + public void addBeforeNode(Object o,Node theNode){ + Node prevNode=theNode.prev; + Node newNode= new Node(o,theNode,prevNode); + theNode.prev=newNode; + if(null==prevNode){ + this.head=newNode; + }else{ + prevNode.next=newNode; + } + size++; + } + + /** + * 默认添加到队尾 + * @param o + */ + public void addLast(Object o){ + Node l=this.last; + Node node= new Node(o,null,l); + if(null!=l){ + l.next=node; + }else{ + this.head=node; + } + size++; + } + + /** + * 查找对应下标的节点并返回 + * @param index + * @return + */ + private Node node(int index){ + if(index<(this.size>>1)){ + Node current=head; + for(int i=0;iindex;i--){ + current=current.prev; + } + return current; + } + } + + public Iterator iterator(){ + return new MyLinkedListIterator(); + } + + private class MyLinkedListIterator implements Iterator{ + private Node current=head; + + @Override + public boolean hasNext() { + + return current!=last; + } + + @Override + public Object next() { + if(hasNext()==false){ + throw new RuntimeException("不存在对应元素"); + } + Object o=current.data; + current=current.next; + return o; + } + + @Override + public void remove() { + int index=MyLinkedList.this.indexOf(current); + MyLinkedList.this.remove(index); + } + + } + /** + * 双向链表 + * @author 小摩托 + * + */ + private static class Node{ + Object data; + Node next; + Node prev; + public Node(Object d,Node n,Node p){ + this.data=d; + this.next=n; + this.prev=p; + } + } + +} diff --git a/group11/542194147/myDataStructure/src/com/coding/basic/MyList.java b/group11/542194147/myDataStructure/src/com/coding/basic/MyList.java new file mode 100644 index 0000000000..73f331beec --- /dev/null +++ b/group11/542194147/myDataStructure/src/com/coding/basic/MyList.java @@ -0,0 +1,34 @@ +package com.coding.basic; + +public interface MyList { + + /** + * 向集合中添加元素 + * @param o 任意类型元素 + */ + public void add(Object o); + /** + * 向集合中添加元素 + * @param index 指定位置下标 + * @param o 任意类型元素 + */ + public void add(int index, Object o); + /** + * 获取对应下标的元素 + * @param index 下标 + * @return 对应下标的元素 + */ + public Object get(int index); + /** + * 移除对应下标的元素 + * @param index 下标 + * @return + */ + public Object remove(int index); + /** + * 获取集合的大小 + * @return 大小数值 + */ + public int size(); + +} diff --git a/group11/542194147/myDataStructure/src/com/coding/basic/MyQueue.java b/group11/542194147/myDataStructure/src/com/coding/basic/MyQueue.java new file mode 100644 index 0000000000..c7fba907d4 --- /dev/null +++ b/group11/542194147/myDataStructure/src/com/coding/basic/MyQueue.java @@ -0,0 +1,19 @@ +package com.coding.basic; + +public class MyQueue { + + public void enQueue(Object o){ + } + + public Object deQueue(){ + return null; + } + + public boolean isEmpty(){ + return false; + } + + public int size(){ + return -1; + } +} diff --git a/group11/542194147/myDataStructure/src/com/coding/basic/MyStack.java b/group11/542194147/myDataStructure/src/com/coding/basic/MyStack.java new file mode 100644 index 0000000000..705b3ec7e0 --- /dev/null +++ b/group11/542194147/myDataStructure/src/com/coding/basic/MyStack.java @@ -0,0 +1,25 @@ +package com.coding.basic; + +import java.util.ArrayList; + +public class MyStack { + + private ArrayList elementData = new ArrayList(); + + public void push(Object o){ + } + + public Object pop(){ + return null; + } + + public Object peek(){ + return null; + } + public boolean isEmpty(){ + return false; + } + public int size(){ + return -1; + } +}