From e5c0da0533f6347a953b9becc631f49712bf8bf7 Mon Sep 17 00:00:00 2001
From: fengyuxia <474772605@qq.com>
Date: Sun, 5 Mar 2017 21:39:10 +0800
Subject: [PATCH 001/315] no message
---
group04/474772605/.classpath | 4 +
.../com/coderising/action/LoginAction.java | 40 +++++
.../src/com/coderising/action/Struts.java | 167 ++++++++++++++++++
.../src/com/coderising/action/StrutsTest.java | 43 +++++
.../src/com/coderising/action/View.java | 23 +++
.../src/com/coderising/action/struts.xml | 11 ++
.../src/com/coderising/array/ArrayUtil.java | 146 +++++++++++++++
.../src/com/coding/basic/LinkedList.java | 1 +
.../474772605/src/com/coding/basic/List.java | 2 +-
.../474772605/src/com/coding/basic/Node.java | 12 ++
.../474772605/src/com/coding/basic/Stack.java | 34 ++--
.../com/coding/basic/Testclassextends.java | 17 ++
.../src/com/coding/basic/testarraylist.java | 7 +-
.../src/com/coding/iostreams/inteface.java | 11 ++
.../src/com/coding/iostreams/readfile.java | 67 +++++++
.../src/com/coding/iostreams/test.java | 14 ++
group04/474772605/src/struts.xml | 11 ++
group04/474772605/test/Test.java | 50 ++++++
.../test/com/coding/basic/Heros.java | 51 ++++++
.../474772605/test/com/coding/basic/Test.java | 43 +++++
.../test/com/coding/basic/TestStack.java | 35 ++++
.../test/com/coding/basic/Testarray.java | 22 +++
.../test/com/coding/basic/teest.java | 24 +++
23 files changed, 817 insertions(+), 18 deletions(-)
create mode 100644 group04/474772605/src/com/coderising/action/LoginAction.java
create mode 100644 group04/474772605/src/com/coderising/action/Struts.java
create mode 100644 group04/474772605/src/com/coderising/action/StrutsTest.java
create mode 100644 group04/474772605/src/com/coderising/action/View.java
create mode 100644 group04/474772605/src/com/coderising/action/struts.xml
create mode 100644 group04/474772605/src/com/coderising/array/ArrayUtil.java
create mode 100644 group04/474772605/src/com/coding/basic/Node.java
create mode 100644 group04/474772605/src/com/coding/basic/Testclassextends.java
create mode 100644 group04/474772605/src/com/coding/iostreams/inteface.java
create mode 100644 group04/474772605/src/com/coding/iostreams/readfile.java
create mode 100644 group04/474772605/src/com/coding/iostreams/test.java
create mode 100644 group04/474772605/src/struts.xml
create mode 100644 group04/474772605/test/Test.java
create mode 100644 group04/474772605/test/com/coding/basic/Heros.java
create mode 100644 group04/474772605/test/com/coding/basic/Test.java
create mode 100644 group04/474772605/test/com/coding/basic/TestStack.java
create mode 100644 group04/474772605/test/com/coding/basic/Testarray.java
create mode 100644 group04/474772605/test/com/coding/basic/teest.java
diff --git a/group04/474772605/.classpath b/group04/474772605/.classpath
index 28e2b79383..8d7ead9fe8 100644
--- a/group04/474772605/.classpath
+++ b/group04/474772605/.classpath
@@ -1,7 +1,11 @@
+
+
+
+
diff --git a/group04/474772605/src/com/coderising/action/LoginAction.java b/group04/474772605/src/com/coderising/action/LoginAction.java
new file mode 100644
index 0000000000..69ad2750c0
--- /dev/null
+++ b/group04/474772605/src/com/coderising/action/LoginAction.java
@@ -0,0 +1,40 @@
+package com.coderising.action;
+
+/**
+ * 这是一个用来展示登录的业务类, 其中的用户名和密码都是硬编码的。
+ * @author liuxin
+ *
+ */
+public class LoginAction{
+ private String name ;
+ private String password;
+ private String message;
+
+ public String getName() {
+ return name;
+ }
+
+ public String getPassword() {
+ return password;
+ }
+
+ public String execute(){
+ if("test".equals(name) && "1234".equals(password)){
+ this.message = "login successful";
+ return "success";
+ }
+ this.message = "login failed,please check your user/pwd";
+ return "fail";
+ }
+
+ public void setName(String name){
+
+ this.name = name;
+ }
+ public void setPassword(String password){
+ this.password = password;
+ }
+ public String getMessage(){
+ return this.message;
+ }
+}
diff --git a/group04/474772605/src/com/coderising/action/Struts.java b/group04/474772605/src/com/coderising/action/Struts.java
new file mode 100644
index 0000000000..e2098dff74
--- /dev/null
+++ b/group04/474772605/src/com/coderising/action/Struts.java
@@ -0,0 +1,167 @@
+package com.coderising.action;
+
+import java.io.File;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.dom4j.Attribute;
+import org.dom4j.DocumentException;
+import org.dom4j.Element;
+import org.dom4j.io.SAXReader;
+
+
+
+public class Struts {
+
+
+
+ public static void main(String[] args) throws DocumentException {
+String actionName = "com.coderising.action.LoginAction";
+
+ Map params = new HashMap();
+ params.put("name","test");
+ params.put("password","1234");
+
+
+ View view = Struts.runAction(actionName,params);
+ }
+
+
+
+/* //遍历当前节点下的所有节点
+ public static void listNodes(Element node){
+ System.out.println("当前节点的名称:" + node.getName());
+ //首先获取当前节点的所有属性节点
+ List list = node.attributes();
+ //遍历属性节点
+ for(Attribute attribute : list){
+ System.out.println("属性"+attribute.getName() +":" + attribute.getValue());
+ }
+ //如果当前节点内容不为空,则输出
+ if(!(node.getTextTrim().equals(""))){
+ System.out.println( node.getName() + ":" + node.getText());
+ }
+ //同时迭代当前节点下面的所有子节点
+ //使用递归
+ Iterator iterator = node.elementIterator();
+ while(iterator.hasNext()){
+ Element e = iterator.next();
+ listNodes(e);
+ }
+ } */
+
+ public static View runAction(String actionName, Map parameters) {
+
+ SAXReader reader = new SAXReader();
+ //读取文件 转换成Document
+ org.dom4j.Document document;
+ try {
+ document = reader.read(new File("src/struts.xml"));
+ Element root = document.getRootElement();
+ List childList2 = root.elements("action");
+ Iterator it = childList2.iterator();
+ /* while (it.hasNext()){
+ Element element = it.next();
+ System.out.println("节点的名称" + element.getName() + "节点的值" + element.getText());
+
+ }*/
+ for (int i = 0; i < childList2.size(); i++) {
+ List list = childList2.get(i).attributes();
+ Iterator it1 = list.iterator();
+ while(it1.hasNext()){
+
+ Attribute attribute1 = it1.next();
+ System.out.println(attribute1.getName());
+ System.out.println(attribute1.getValue());
+ System.out.println("==============");
+
+ }
+
+ for(Attribute attribute : list){
+
+ if(actionName.equals(attribute.getValue())){
+
+ String clazz = null;
+
+ clazz = attribute.getValue();
+ try {
+ Object o = Class.forName(clazz).newInstance();
+ try {
+ Method m = o.getClass().getMethod("setName", String.class);
+ Method m1 = o.getClass().getMethod("setPassword", String.class);
+ Method m3 = o.getClass().getMethod("execute");
+ try {
+ m.invoke(o, parameters.get("name"));
+ m1.invoke(o, parameters.get("password"));
+ String result = (String) m3.invoke(o);
+ System.out.println(result);
+ } catch (IllegalArgumentException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } catch (InvocationTargetException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ } catch (SecurityException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } catch (NoSuchMethodException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+
+
+ } catch (InstantiationException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } catch (IllegalAccessException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } catch (ClassNotFoundException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } //根据class生成实例
+ }
+
+
+ }
+
+ }
+ } catch (DocumentException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ //获取根节点元素对象
+
+
+
+
+ /*
+
+ 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字段中。
+
+ */
+
+ return null;
+ }
+
+}
diff --git a/group04/474772605/src/com/coderising/action/StrutsTest.java b/group04/474772605/src/com/coderising/action/StrutsTest.java
new file mode 100644
index 0000000000..c161c0f932
--- /dev/null
+++ b/group04/474772605/src/com/coderising/action/StrutsTest.java
@@ -0,0 +1,43 @@
+package com.coderising.action;
+
+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 = "com.coderising.action.LoginAction";
+
+ 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/group04/474772605/src/com/coderising/action/View.java b/group04/474772605/src/com/coderising/action/View.java
new file mode 100644
index 0000000000..11cb1872e5
--- /dev/null
+++ b/group04/474772605/src/com/coderising/action/View.java
@@ -0,0 +1,23 @@
+package com.coderising.action;
+
+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/group04/474772605/src/com/coderising/action/struts.xml b/group04/474772605/src/com/coderising/action/struts.xml
new file mode 100644
index 0000000000..a6cfe43e6c
--- /dev/null
+++ b/group04/474772605/src/com/coderising/action/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/group04/474772605/src/com/coderising/array/ArrayUtil.java b/group04/474772605/src/com/coderising/array/ArrayUtil.java
new file mode 100644
index 0000000000..ddb00c17b6
--- /dev/null
+++ b/group04/474772605/src/com/coderising/array/ArrayUtil.java
@@ -0,0 +1,146 @@
+package com.coderising.array;
+
+import java.util.ArrayList;
+import java.util.Stack;
+
+import com.coding.basic.LinkedList;
+
+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 void reverseArray(int[] origin){
+ Stack stack = new Stack();
+ for (int i = 0; i < origin.length; i++) {
+ stack.add(origin[i]);
+ }
+
+ for (int j = 0; j < stack.size(); j++) {
+ origin[j] = (Integer) stack.pop();
+ }
+
+ }
+
+ /**
+ * 现在有如下的一个数组: 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){
+ ArrayList newarray = new ArrayList();
+ for (int i = 0; i < oldArray.length; i++) {
+ if(0!=oldArray[i]){
+ newarray.add(oldArray[i]);
+ }
+ }
+ int result [] = new int [newarray.size()];
+ for (int j = 0; j < result.length; j++) {
+ result[j]=newarray.get(j);
+ }
+
+ return result;
+ }
+
+ /**
+ * 给定两个已经排序好的整形数组, a1和a2 , 创建一个新的数组a3, 使得a3 包含a1和a2 的所有元素, 并且仍然是有序的
+ * 例如 a1 = [3, 5, 7,8] a2 = [4, 5, 6,7] 则 a3 为[3,4,5,6,7,8] , 注意: 已经消除了重复
+ * @param array1
+ * @param array2
+ * @return
+ */
+
+ public int[] merge(int[] array1, int[] array2){
+ ArrayList newarray = new ArrayList();
+ for (int i = 0; i < array1.length; i++) {
+ newarray.add(i, array1[i]);
+ }
+ for (int j = 0; j < array2.length; j++) {
+ if (newarray.get(j)>array2[j]&&newarray.get(j+1)>array2[j]) {
+ newarray.add(j+1, array2[j]);
+ }
+ }
+
+ int result [] = new int [newarray.size()];
+ for (int z = 0; z < result.length; z++) {
+ result[z]=newarray.get(z);
+ }
+ return result;
+ }
+ /**
+ * 把一个已经存满数据的数组 oldArray的容量进行扩展, 扩展后的新数据大小为oldArray.length + size
+ * 注意,老数组的元素在新数组中需要保持
+ * 例如 oldArray = [2,3,6] , size = 3,则返回的新数组为
+ * [2,3,6,0,0,0]
+ * @param oldArray
+ * @param size
+ * @return
+ */
+ public int[] grow(int [] oldArray, int size){
+ ArrayList newarray = new ArrayList();
+ for (int i = 0; i < oldArray.length; i++) {
+ newarray.add(i, oldArray[i]);
+ }
+ while (newarray.size()='A'&&(char)num <='z'){
+ n1++;
+ }
+ if((char)num >='A'&&(char)num <='Z'){
+ n2++;
+ }
+ }
+ }
+ reader.close();
+ System.out.println(n1+""+n2);
+ } catch (FileNotFoundException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } catch (IOException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
+
+
+
+ public float method(){
+ return 13.21f;
+ }
+
+
+
+
+ }
+
+
+
+
+
+
+
+
+
+
+
diff --git a/group04/474772605/src/com/coding/iostreams/test.java b/group04/474772605/src/com/coding/iostreams/test.java
new file mode 100644
index 0000000000..1bd474ca7b
--- /dev/null
+++ b/group04/474772605/src/com/coding/iostreams/test.java
@@ -0,0 +1,14 @@
+package com.coding.iostreams;
+
+public interface test {
+ public float method();
+
+}
+
+
+
+
+
+
+
+
diff --git a/group04/474772605/src/struts.xml b/group04/474772605/src/struts.xml
new file mode 100644
index 0000000000..90cf18b7da
--- /dev/null
+++ b/group04/474772605/src/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/group04/474772605/test/Test.java b/group04/474772605/test/Test.java
new file mode 100644
index 0000000000..8c0f62930b
--- /dev/null
+++ b/group04/474772605/test/Test.java
@@ -0,0 +1,50 @@
+
+
+ import java.io.File;
+ import java.io.FileInputStream;
+ import java.io.InputStreamReader;
+ import java.io.Reader;
+
+
+
+
+ public class Test{
+ static int n1 =0 ;
+ static int n2 =0 ;
+
+ public static void main(String[] args) throws Exception{
+
+ Test.readFileByChars("D://Text.txt");
+
+ System.out.println("字母个数为:"+n1+" 字母个数为"+n2);
+
+ }
+
+ public static void readFileByChars(String fileName) {
+ File file = new File(fileName);
+ Reader reader = null;
+ try {
+ System.out.println("以字符为单位读取文件内容,一次读一个字节:");
+ // 一次读一个字符
+ reader = new InputStreamReader(new FileInputStream(file));
+ int tempchar;
+ while ((tempchar = reader.read()) != -1) {
+ // 对于windows下,\r\n这两个字符在一起时,表示一个换行。
+ // 但如果这两个字符分开显示时,会换两次行。
+ // 因此,屏蔽掉\r,或者屏蔽\n。否则,将会多出很多空行。
+ if (((char) tempchar) != '\r') {
+ System.out.print((char) tempchar);
+ n1++;
+ if((char)tempchar >='A'&&(char)tempchar<='Z'){
+ n2++;
+ }
+
+ }
+ }
+ reader.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
diff --git a/group04/474772605/test/com/coding/basic/Heros.java b/group04/474772605/test/com/coding/basic/Heros.java
new file mode 100644
index 0000000000..878204aede
--- /dev/null
+++ b/group04/474772605/test/com/coding/basic/Heros.java
@@ -0,0 +1,51 @@
+package com.coding.basic;
+
+import java.lang.reflect.Method;
+
+public class Heros {
+ private String name;//名字
+ private String type;//类型
+ private int camp;//0,近卫;1,天灾
+ public Heros(){
+
+ }
+ /*
+ public Heros(String name, String type, int camp) {
+
+ super();
+
+ this.name = name;
+ this.type = type;
+ this.camp = camp;
+ }*/
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+
+ public int getCamp() {
+ return camp;
+ }
+
+ public void setCamp(int camp) {
+ this.camp = camp;
+ }
+
+ @Override
+ public String toString() {
+ return "Heros [\n name=" + name + ", \n type=" + type + ", \n camp=" + camp + "\n]";
+ }
+
+}
\ No newline at end of file
diff --git a/group04/474772605/test/com/coding/basic/Test.java b/group04/474772605/test/com/coding/basic/Test.java
new file mode 100644
index 0000000000..97f7254c82
--- /dev/null
+++ b/group04/474772605/test/com/coding/basic/Test.java
@@ -0,0 +1,43 @@
+package com.coding.basic;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+
+public class Test {
+
+ public static void main(String args[]) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException {
+ Foo foo = new Foo("这个一个Foo对象!");
+ Class clazz = foo.getClass();
+ Field[] abc =clazz.getDeclaredFields();
+
+ // Object value = getFieldValueByName(key, obj);
+ Method m1 = clazz.getDeclaredMethod("outInfo");
+ Method m2 = clazz.getDeclaredMethod("setMsg", String.class);
+ Method m3 = clazz.getDeclaredMethod("getMsg");
+ m1.invoke(foo);
+ m2.invoke(foo, "重新设置msg信息!");
+ String msg = (String) m3.invoke(foo);
+ System.out.println(msg);
+ }
+}
+
+class Foo {
+ private String msg;
+
+ public Foo(String msg) {
+ this.msg = msg;
+ }
+
+ public void setMsg(String msg) {
+ this.msg = msg;
+ }
+
+ public String getMsg() {
+ return msg;
+ }
+
+ public void outInfo() {
+ System.out.println("这是测试Java反射的测试类");
+ }
+}
diff --git a/group04/474772605/test/com/coding/basic/TestStack.java b/group04/474772605/test/com/coding/basic/TestStack.java
new file mode 100644
index 0000000000..e4caa84d98
--- /dev/null
+++ b/group04/474772605/test/com/coding/basic/TestStack.java
@@ -0,0 +1,35 @@
+package com.coding.basic;
+
+import junit.framework.TestCase;
+
+public class TestStack extends TestCase{
+private Stack stack;
+
+
+public void setUp() throws Exception {
+ stack = new Stack();
+
+}
+
+public void testpop(){
+// Stack stack = new Stack();
+ Object o = null ;
+ try {
+ stack.push(o);
+ } catch (Exception e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+
+
+
+
+}
+
+
+
+
+
+
+
+}
diff --git a/group04/474772605/test/com/coding/basic/Testarray.java b/group04/474772605/test/com/coding/basic/Testarray.java
new file mode 100644
index 0000000000..19edb9f85d
--- /dev/null
+++ b/group04/474772605/test/com/coding/basic/Testarray.java
@@ -0,0 +1,22 @@
+package com.coding.basic;
+
+import junit.framework.TestCase;
+
+public class Testarray extends TestCase{
+
+ public void testararry(){
+ Throwable tx = null;
+ try {
+ ArrayList n = new ArrayList();
+ Object o = null ;
+
+ n.add(o);
+ fail();
+ } catch (Exception e) {
+ tx =e;
+ assertEquals(Exception.class, tx.getClass());
+ assertEquals("对象不能为空", e.getMessage());
+ }
+ }
+
+}
diff --git a/group04/474772605/test/com/coding/basic/teest.java b/group04/474772605/test/com/coding/basic/teest.java
new file mode 100644
index 0000000000..e8004c14b6
--- /dev/null
+++ b/group04/474772605/test/com/coding/basic/teest.java
@@ -0,0 +1,24 @@
+package com.coding.basic;
+
+import java.lang.reflect.Method;
+
+public class teest {
+ public static void main(String[] args) {
+ Class> herosClass = Heros.class;
+ try {
+ Method m1 = herosClass.getMethod("setName",String.class);
+ Method m3 = herosClass.getMethod("setCamp",int.class);
+ Method m2 = herosClass.getMethod("getName");
+
+
+ Object userInfo = herosClass.newInstance();
+ System.out.println("调用构造函数:"+userInfo);
+ m1.invoke(userInfo,"影魔");
+ m3.invoke(userInfo, 1);
+ System.out.println("调用set方法:"+userInfo);
+ System.out.println("调用get方法:"+m2.invoke(userInfo));
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+}
From b85819a5c6ac1ff35a367eee9bf21472e87622ee Mon Sep 17 00:00:00 2001
From: Samson Shenglu Cao
Date: Mon, 6 Mar 2017 11:53:18 +0800
Subject: [PATCH 002/315] modify
---
group19/972815123/src/com/coderising/litestruts/Struts.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/group19/972815123/src/com/coderising/litestruts/Struts.java b/group19/972815123/src/com/coderising/litestruts/Struts.java
index 7d908282b6..2aeaffd491 100644
--- a/group19/972815123/src/com/coderising/litestruts/Struts.java
+++ b/group19/972815123/src/com/coderising/litestruts/Struts.java
@@ -52,7 +52,7 @@ public class Struts {
public static View runAction(String actionName, Map parameters) {
HashMap> xml = parseStrutsXml(url);
- HashMap login = xml.get("login");
+ HashMap login = xml.get(actionName);
String loginClassName = login.get("class");
System.out.println(loginClassName);
From f67fec97bd72576af1f9bac00419f8ffcfa9f895 Mon Sep 17 00:00:00 2001
From: dudy
Date: Tue, 7 Mar 2017 20:01:06 +0800
Subject: [PATCH 003/315] sortdemo singleton
---
.../com/dudy/learn01/base/MyLinkedList.java | 12 ++
.../singleton/EnumSingleton.java | 40 +++++++
.../singleton/SingletonDemo1.java | 66 +++++++++++
.../singleton/StaticClassInnerSingleton.java | 63 +++++++++++
.../com/dudy/learn01/utils/ArraySortDemo.java | 107 ++++++++++++++++++
5 files changed, 288 insertions(+)
create mode 100644 group04/1796244932/learn01/src/main/java/com/dudy/learn01/designPattern/singleton/EnumSingleton.java
create mode 100644 group04/1796244932/learn01/src/main/java/com/dudy/learn01/designPattern/singleton/SingletonDemo1.java
create mode 100644 group04/1796244932/learn01/src/main/java/com/dudy/learn01/designPattern/singleton/StaticClassInnerSingleton.java
create mode 100644 group04/1796244932/learn01/src/main/java/com/dudy/learn01/utils/ArraySortDemo.java
diff --git a/group04/1796244932/learn01/src/main/java/com/dudy/learn01/base/MyLinkedList.java b/group04/1796244932/learn01/src/main/java/com/dudy/learn01/base/MyLinkedList.java
index 60254997aa..e0dbe9aae8 100644
--- a/group04/1796244932/learn01/src/main/java/com/dudy/learn01/base/MyLinkedList.java
+++ b/group04/1796244932/learn01/src/main/java/com/dudy/learn01/base/MyLinkedList.java
@@ -89,6 +89,17 @@ public Object removeLast() {
return tmp.data;
}
+ /**
+ * 链表逆序
+ */
+ public void reverse(){
+
+ }
+
+
+
+
+
public MyIterator iterator() {
return new MyLinkedListItr();
}
@@ -108,6 +119,7 @@ public Object next() {
}
}
+
private static class Node {
Object data;
Node next;
diff --git a/group04/1796244932/learn01/src/main/java/com/dudy/learn01/designPattern/singleton/EnumSingleton.java b/group04/1796244932/learn01/src/main/java/com/dudy/learn01/designPattern/singleton/EnumSingleton.java
new file mode 100644
index 0000000000..84e9bd5d2c
--- /dev/null
+++ b/group04/1796244932/learn01/src/main/java/com/dudy/learn01/designPattern/singleton/EnumSingleton.java
@@ -0,0 +1,40 @@
+package com.dudy.learn01.designPattern.singleton;
+
+import java.util.concurrent.ArrayBlockingQueue;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * Created by dudy on 2017/3/6.
+ */
+public enum EnumSingleton {
+
+ SINGLETON;
+ private EnumSingleton(){}
+
+
+ public static void main(String[] args) {
+
+ ThreadPoolExecutor executor = new ThreadPoolExecutor(10, 10, 6000 * 10, TimeUnit.MILLISECONDS,
+ new ArrayBlockingQueue(5));
+
+
+ for (int i = 0; i< 16; i++){
+ executor.execute(new EnumSingletonTest());
+ }
+
+ executor.shutdown();
+
+
+ }
+}
+
+
+class EnumSingletonTest implements Runnable{
+
+ @Override
+ public void run() {
+ EnumSingleton singleton = EnumSingleton.SINGLETON;
+ System.out.println(singleton.hashCode());
+ }
+}
\ No newline at end of file
diff --git a/group04/1796244932/learn01/src/main/java/com/dudy/learn01/designPattern/singleton/SingletonDemo1.java b/group04/1796244932/learn01/src/main/java/com/dudy/learn01/designPattern/singleton/SingletonDemo1.java
new file mode 100644
index 0000000000..8de831c354
--- /dev/null
+++ b/group04/1796244932/learn01/src/main/java/com/dudy/learn01/designPattern/singleton/SingletonDemo1.java
@@ -0,0 +1,66 @@
+package com.dudy.learn01.designPattern.singleton;
+
+import java.io.Serializable;
+import java.util.concurrent.*;
+
+/**
+ * Created by dudy on 2017/3/6.
+ * 双检索 方式
+ * jdk1.5 以后 其实是线程安全的。
+ * 序列化会 破坏 单利
+ *
+ */
+public class SingletonDemo1 implements Serializable{
+
+ private static volatile SingletonDemo1 singleton = null; // 加 volatile 是为了 可见性,另一个就是 避免重排序
+
+ private SingletonDemo1(){}
+
+ public static SingletonDemo1 getIntance(){
+
+ if (singleton == null){// 第一个避免 在 synchronized 中 一直排队
+ synchronized (SingletonDemo1.class){
+
+ if (singleton == null){// 如果对象为空,才被创建
+ singleton = new SingletonDemo1();
+ }
+
+ }
+ }
+
+ return singleton;
+ }
+
+
+ /**
+ * 解决 反序列化的问题
+ * @return
+ */
+ private Object readResolve() {
+ return singleton;
+ }
+
+ public static void main(String[] args) {
+
+ ExecutorService threadPool = Executors.newFixedThreadPool(10);
+
+ for (int i= 0 ;i < 5; i++){
+ threadPool.execute(new TestRunable());
+ }
+
+ threadPool.shutdown();
+
+ //new ThreadPoolExecutor(10,20,1000*2,new BlockingQueue(),)
+
+
+ }
+
+}
+
+ class TestRunable implements Runnable{
+
+ public void run() {
+ SingletonDemo1 intance = SingletonDemo1.getIntance();
+ System.out.println(intance.hashCode());
+ }
+ }
diff --git a/group04/1796244932/learn01/src/main/java/com/dudy/learn01/designPattern/singleton/StaticClassInnerSingleton.java b/group04/1796244932/learn01/src/main/java/com/dudy/learn01/designPattern/singleton/StaticClassInnerSingleton.java
new file mode 100644
index 0000000000..d8b484cd15
--- /dev/null
+++ b/group04/1796244932/learn01/src/main/java/com/dudy/learn01/designPattern/singleton/StaticClassInnerSingleton.java
@@ -0,0 +1,63 @@
+package com.dudy.learn01.designPattern.singleton;
+
+import java.util.concurrent.LinkedBlockingDeque;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * Created by dudy on 2017/3/6.
+ *
+ * 静态内部类方式 实现
+ *
+ * 这种方式同样利用了classloder的机制来保证初始化instance时只有一个线程,
+ * 它跟饿汉式不同的是(很细微的差别):饿汉式是只要Singleton类被装载了,
+ * 那么instance就会被实例化(没有达到lazy loading效果),而这种方式是Singleton类被装载了,
+ * instance不一定被初始化。因为SingletonHolder类没有被主动使用,
+ * 只有显示通过调用getInstance方法时,才会显示装载SingletonHolder类,
+ * 从而实例化instance。想象一下,如果实例化instance很消耗资源,我想让他延迟加载,
+ * 另外一方面,我不希望在Singleton类加载时就实例化,
+ * 因为我不能确保Singleton类还可能在其他的地方被主动使用从而被加载,
+ * 那么这个时候实例化instance显然是不合适的。这个时候,这种方式相比饿汉式更加合理
+ *
+ */
+public class StaticClassInnerSingleton {
+
+ // 构造器 私有化
+ private StaticClassInnerSingleton(){}
+
+ private static class SingletonHolder{
+ private static final StaticClassInnerSingleton INSTANCE = new StaticClassInnerSingleton();
+ }
+
+
+ public static StaticClassInnerSingleton getInstance(){
+ return SingletonHolder.INSTANCE;
+ }
+
+
+ public static void main(String[] args) {
+
+
+ ThreadPoolExecutor pool = new ThreadPoolExecutor(10, 10,
+ 6000 * 10, TimeUnit.MILLISECONDS,
+ new LinkedBlockingDeque());
+
+ for (int i= 0; i<20; i++){
+ pool.execute(new StaicSingletonTest());
+ //System.out.println(StaticClassInnerSingleton.getInstance().hashCode());
+ }
+
+ pool.shutdown();
+ }
+
+
+
+}
+
+class StaicSingletonTest implements Runnable{
+
+ public void run() {
+ StaticClassInnerSingleton intance = StaticClassInnerSingleton.getInstance();
+ System.out.println(intance.hashCode());
+ }
+}
\ No newline at end of file
diff --git a/group04/1796244932/learn01/src/main/java/com/dudy/learn01/utils/ArraySortDemo.java b/group04/1796244932/learn01/src/main/java/com/dudy/learn01/utils/ArraySortDemo.java
new file mode 100644
index 0000000000..a26790375a
--- /dev/null
+++ b/group04/1796244932/learn01/src/main/java/com/dudy/learn01/utils/ArraySortDemo.java
@@ -0,0 +1,107 @@
+package com.dudy.learn01.utils;
+
+import java.util.Arrays;
+
+/**
+ * Created by dudy on 2017/3/6.
+ * 练习数组的各种排序
+ * 参考:http://wiki.jikexueyuan.com/project/java-special-topic/sort.html
+ * http://www.cnblogs.com/liuling/p/2013-7-24-01.html
+ *
+ * 内排序有可以分为以下几类:
+
+ (1)、插入排序:直接插入排序、二分法插入排序、希尔排序。
+
+ (2)、选择排序:简单选择排序、堆排序。
+
+ (3)、交换排序:冒泡排序、快速排序。
+
+ (4)、归并排序
+
+ (5)、基数排序
+ *
+ */
+public class ArraySortDemo {
+
+
+ /**
+ * 二分法查找 插入
+ * 和 直接插入排序不同的是: 查找 要插入的位置的方式不同
+ * 二分法前提是有序的**
+ *
+ *
+ *
+ */
+ public static void dichotomySort(int src[]){
+
+ for (int i = 0; i< src.length ; i++){
+ int temp = src[i];
+ int right = i - 1;
+ int mid = 0;
+ int left = 0;
+ while (left <= right){
+ mid = (left + right)/2;
+ if (temp > src[mid]){
+ left = mid + 1;
+ } else {
+ right = mid - 1;
+ }
+ }
+
+ for (int j = i-1;j>=left ; j--){
+ src[j+1] = src[j];
+ }
+
+ System.out.println("left = " + left +" ,mid = " + mid + " ,right = " + right);
+ src[left] = temp;
+
+ }
+ }
+
+
+
+
+ /**
+ * 直接插入排序
+ * 思想:假定前边是有序地部分, 后边无序的插入到前边部分
+ * 可以转变思想: 从后往前遍历, 将有序部分大于当前的值 往后移
+ * @param src
+ */
+ public static void directInsertSort(int[] src){
+
+ for (int i = 1;i < src.length ; i++){
+ // 待插入的元素
+ int temp = src[i];
+ int j;
+ for ( j = i -1; j >= 0; j--){
+ // 大于 temp的往后移动
+ if (src[j] > temp){
+ src[j+1] = src[j];
+ } else {
+ break;
+ }
+ }// 此时遍历完 j+1 为要插入的位置
+ src[j+1] = temp;
+ }
+
+ }
+
+
+
+ public static void main(String[] args) {
+ int a[] = new int[]{46,89,14,44,90,32,25,67,23};
+ // 14,23,25,32,44,46,67,89,90
+ //Arrays.sort(a);
+
+
+ //directInsertSort(a);
+
+ dichotomySort(a);
+
+ for (int i = 0; i< a.length ; i++){
+ System.out.print(a[i] + ",");
+ }
+
+ }
+
+}
From 4c61b24c65f4c10d0ec206108ee2bfb8b94306a6 Mon Sep 17 00:00:00 2001
From: x_zhaohu
Date: Tue, 7 Mar 2017 21:41:52 +0800
Subject: [PATCH 004/315] xiaoti
---
.../DataStructure/src/main/java/com/Main.java | 57 +------
.../basic/.LinkedList.java.swp} | Bin 12288 -> 16384 bytes
.../java/com/coding/basic/LinkedList.java | 156 +++++++++++++++++-
3 files changed, 164 insertions(+), 49 deletions(-)
rename group11/1178243325/DataStructure/src/main/java/com/{coderising/litestruts/.Struts.java.swp => coding/basic/.LinkedList.java.swp} (57%)
diff --git a/group11/1178243325/DataStructure/src/main/java/com/Main.java b/group11/1178243325/DataStructure/src/main/java/com/Main.java
index f5e5a36ebd..8d49de33c4 100644
--- a/group11/1178243325/DataStructure/src/main/java/com/Main.java
+++ b/group11/1178243325/DataStructure/src/main/java/com/Main.java
@@ -1,56 +1,17 @@
package com;
-import java.util.*;
-import com.coderising.litestruts.*;
-import com.coderising.array.*;
+import com.coding.basic.LinkedList;
+import com.coding.basic.Iterator;
public class Main {
public static void main(String[] args) {
- int[] array = {1, 2, 3, 4, 5};
- System.out.print("reverseArray测试:");
- ArrayUtil.reverseArray(array);
- for (int i : array)
- System.out.print(i + " ");
- System.out.print("\nremoveZero测试:");
+ LinkedList list = new LinkedList();
- int[] oldArray = {1, 3, 4, 5, 0, 0, 8 , 0, 9};
- oldArray = ArrayUtil.removeZero(oldArray);
- for (int i : oldArray) {
- System.out.print(i + " ");
+ for(int i = 0; i < 10; i++)
+ list.add(i);
+ list.remove(2, 5);
+ Iterator iter = list.iterator();
+ while(iter.hasNext()) {
+ System.out.println(iter.next());
}
-
- System.out.print("\nmerge测试:");
- int[] a1 = {3, 5,8};
- int[] a2 = {4, 5, 6,7};
- int[] arrays = ArrayUtil.merge(a1, a2);
- for (int i : arrays)
- System.out.print(i + " ");
-
- System.out.print("\ngrow测试:");
-
- int[] growArray = ArrayUtil.grow(a1, 5);
- for (int i : growArray)
- System.out.print(i + " ");
-
- System.out.print("\nfibonacci测试");
- int[] fArray = ArrayUtil.fibonacci(1);
- System.out.print(fArray);
- System.out.println();
- fArray = ArrayUtil.fibonacci(15);
- for (int i : fArray)
- System.out.print(i + " ");
- System.out.print("\ngetPrimes测试:");
- int[] primesArray = ArrayUtil.getPrimes(23);
- for (int i : primesArray)
- System.out.print(i + " ");
- System.out.print("\ngetPerfectNumbers测试:");
- int[] pArray = ArrayUtil.getPerfectNumbers(100);
- for (int i : pArray)
- System.out.print(i + " ");
- System.out.print("\njoin测试:");
- int[] jArray = new int[]{2, 3, 8};
- System.out.print(ArrayUtil.join(jArray, "-"));
- Map map = new HashMap<>();
- Struts.runAction("login", map);
-
}
}
diff --git a/group11/1178243325/DataStructure/src/main/java/com/coderising/litestruts/.Struts.java.swp b/group11/1178243325/DataStructure/src/main/java/com/coding/basic/.LinkedList.java.swp
similarity index 57%
rename from group11/1178243325/DataStructure/src/main/java/com/coderising/litestruts/.Struts.java.swp
rename to group11/1178243325/DataStructure/src/main/java/com/coding/basic/.LinkedList.java.swp
index 1f45a5f25e9bf8dcf03addb1f9a3a0a4c6fe0a2f..7ea2e295d458709c233e753f5a1bc442a43cead0 100644
GIT binary patch
literal 16384
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
R{)L12RT~^;Qn}7={2RR2tVI9-
literal 12288
zcmeHN-)|H}93MFDF=6Z>+URINc933
z+R}=_wrHyrG^inRZ8c&`TX<3b27eI~>Fym52A@oP($DP7^{!2+z7l4W&+gvN_t$*B
z-|tMCPFMZDwsyMRXd<{a5mM8((7EAtyl*4KcfGX3_`urN|CM`F2qq7jhs~sw>$dqV
z?esL%r?w}1yjQpr?m`;LaD#>R$i$rnv#?qObFvB0yFzGo$~X4)yMXJZpy+J}W?
zCe3UgqRdZn4dxr%$=YG7QN_T$!$83HKeJ;aX>3T<^GQFcZ=suOI_{nMtC=bW6a$I@
z#eiZ!F`yVw3@8Q^1BAKj$XnpyKFLL^e6CyZlt0x&F`yVw3@8Q^1BwB~fMP%~pcqgL
zCu#1&`UHzarN>W;Wy2*agffTPLRnoi!azRF@QUyHO)5S1Alv%X&u_@
znU3Yn>?Jhk8n|qzZkyFUNb#2Yct#P6E1)C
zV@pfJFZ*udpzn5g8S#A|)F{`bJE?;^|1F$rIL?OyepE4KRg@i5+
z{uxKJ8NH607LV{1c(0?L?FShqT!=6XH(&`pYx}<0V?$cL36XZwZ4vJ3sCc$gp(exH
zW%>tJ5#o{Z$;(isP3R=Vms-TyE?gRE=Wy<~v(1A|=q|$M
za(b;G7OFfU|E1ujRSc>SV&2Nb3Ha$CVRRiRQmW1hSA;j6t_t{HRLb?rh(E
z$J&qWFz*etDH=S!wkC;u;|(7TUkm%Dc%Oxnv!&?^#j%rUvGDS_sPN6=%;lT;;}B{x
zXmoxy8Y=kWOf5PLV-Te+qTpKTt+$7Y3x&GHxr^bM0a-B+C|w^8$0x%4{O$QcN{bf?
zVPPzM@6zH-esSg!9L1mEVf9Gjri<$d^htrKuCe;V-y;G%x@M
z;n~4(dLqhy9xi+m^}Q=R$VR1gbn)8h@U!Fe*iz3wOQ~M`U@lx3fpj?VvEBp;uZ~7dXWg8~C_lJvWK5^W@a+8=REZ%Lx8`L60p9~<
gnXfW}7_cX~*vPTZQ7e}<_<4JASl*}{mTxBi0@A~$y#N3J
diff --git a/group11/1178243325/DataStructure/src/main/java/com/coding/basic/LinkedList.java b/group11/1178243325/DataStructure/src/main/java/com/coding/basic/LinkedList.java
index d82349089b..5717f2226d 100644
--- a/group11/1178243325/DataStructure/src/main/java/com/coding/basic/LinkedList.java
+++ b/group11/1178243325/DataStructure/src/main/java/com/coding/basic/LinkedList.java
@@ -60,7 +60,6 @@ public int size(){
}
public void addFirst(Object o){
- //就是这么硬!
add(0, o);
}
@@ -132,4 +131,159 @@ Object getNext() {
return next;
}
}
+
+
+ /**
+ * 把该链表逆置
+ * 例如链表为 3->7->10 , 逆置后变为 10->7->3
+ */
+ public void reverse(){
+ Object[] oldData = new Object[size];
+ Node temp = head;
+ int index = 1;
+ while(temp.next != null) {
+ temp = temp.next;
+ oldData[size - index] = temp.data;
+ index++;
+ }
+
+ index = 0;
+ temp = head;
+ while(temp.next != null) {
+ temp = temp.next;
+ temp.data = oldData[index];
+ index++;
+ }
+ }
+
+ /**
+ * 删除一个单链表的前半部分
+ * 例如:list = 2->5->7->8 , 删除以后的值为 7->8
+ * 如果list = 2->5->7->8->10 ,删除以后的值为7,8,10
+ */
+
+ public void removeFirstHalf(){
+ int count = size;
+ if (count % 2 != 0) {
+ for (int i = 0; i <= count/2; i++) {
+ removeFirst();
+ }
+ } else {
+ for (int i = 0; i < count/2; i++) {
+ removeFirst();
+ }
+ }
+ }
+
+ /**
+ * 从第i个元素开始, 删除length 个元素 , 注意i从0开始
+ * @param i
+ * @param length
+ */
+
+ public void remove(int i, int length){
+ if (i < 0 || length < 0) {
+ return;
+ }
+ if (i == 0) {
+ for (int k = 0; k < length; k++)
+ removeFirst();
+ } else {
+ while (length > 0) {
+ remove(i-1);
+ length--;
+ }
+ }
+ }
+
+ /**
+ * 假定当前链表和list均包含已升序排列的整数
+ * 从当前链表中取出那些list所指定的元素
+ * 例如当前链表 = 11->101->201->301->401->501->601->701
+ * listB = 1->3->4->6
+ * 返回的结果应该是[101,301,401,601]
+ * @param list
+ */
+
+ public static int[] getElements(LinkedList list){
+
+ return null;
+
+ }
+
+
+
+ /**
+
+ * 已知链表中的元素以值递增有序排列,并以单链表作存储结构。
+
+ * 从当前链表中中删除在list中出现的元素
+
+
+
+ * @param list
+
+ */
+
+
+
+ public void subtract(LinkedList list){
+
+
+
+ }
+
+
+
+ /**
+
+ * 已知当前链表中的元素以值递增有序排列,并以单链表作存储结构。
+
+ * 删除表中所有值相同的多余元素(使得操作后的线性表中所有元素的值均不相同)
+
+ */
+
+ public void removeDuplicateValues(){
+
+
+
+ }
+
+
+
+ /**
+
+ * 已知链表中的元素以值递增有序排列,并以单链表作存储结构。
+
+ * 试写一高效的算法,删除表中所有值大于min且小于max的元素(若表中存在这样的元素)
+
+ * @param min
+
+ * @param max
+
+ */
+
+ public void removeRange(int min, int max){
+
+
+
+ }
+
+
+
+ /**
+
+ * 假设当前链表和参数list指定的链表均以元素依值递增有序排列(同一表中的元素值各不相同)
+
+ * 现要求生成新链表C,其元素为当前链表和list中元素的交集,且表C中的元素有依值递增有序排列
+
+ * @param list
+
+ */
+
+ public LinkedList intersection( LinkedList list){
+
+ return null;
+
+ }
}
From 7d464ac089e796c247ee733a0f8471f02c2fcd66 Mon Sep 17 00:00:00 2001
From: fengyuxia <474772605@qq.com>
Date: Tue, 7 Mar 2017 22:47:59 +0800
Subject: [PATCH 005/315] =?UTF-8?q?=E7=AC=AC=E4=BA=8C=E6=AC=A1=E4=BD=9C?=
=?UTF-8?q?=E4=B8=9A?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
group04/474772605/jsp/homepage.jsp | 12 ++
group04/474772605/jsp/showLogin.jsp | 12 ++
.../com/coderising/action/LogoutAction.java | 40 ++++
.../src/com/coderising/action/Struts.java | 181 +++++++-----------
group04/474772605/src/struts.xml | 2 +-
5 files changed, 133 insertions(+), 114 deletions(-)
create mode 100644 group04/474772605/jsp/homepage.jsp
create mode 100644 group04/474772605/jsp/showLogin.jsp
create mode 100644 group04/474772605/src/com/coderising/action/LogoutAction.java
diff --git a/group04/474772605/jsp/homepage.jsp b/group04/474772605/jsp/homepage.jsp
new file mode 100644
index 0000000000..83fa84db7d
--- /dev/null
+++ b/group04/474772605/jsp/homepage.jsp
@@ -0,0 +1,12 @@
+<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
+ pageEncoding="ISO-8859-1"%>
+
+
+
+
+homepage
+
+
+
+
+
\ No newline at end of file
diff --git a/group04/474772605/jsp/showLogin.jsp b/group04/474772605/jsp/showLogin.jsp
new file mode 100644
index 0000000000..1e6cda01b1
--- /dev/null
+++ b/group04/474772605/jsp/showLogin.jsp
@@ -0,0 +1,12 @@
+<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
+ pageEncoding="ISO-8859-1"%>
+
+
+
+
+showLogin
+
+
+
+
+
\ No newline at end of file
diff --git a/group04/474772605/src/com/coderising/action/LogoutAction.java b/group04/474772605/src/com/coderising/action/LogoutAction.java
new file mode 100644
index 0000000000..10e4eb37c7
--- /dev/null
+++ b/group04/474772605/src/com/coderising/action/LogoutAction.java
@@ -0,0 +1,40 @@
+package com.coderising.action;
+
+/**
+ * 这是一个用来展示登录的业务类, 其中的用户名和密码都是硬编码的。
+ * @author liuxin
+ *
+ */
+public class LogoutAction{
+ private String name ;
+ private String password;
+ private String message;
+
+ public String getName() {
+ return name;
+ }
+
+ public String getPassword() {
+ return password;
+ }
+
+ public String execute(){
+ if("test".equals(name) && "1234".equals(password)){
+ this.message = "login successful";
+ return "success1";
+ }
+ this.message = "login failed,please check your user/pwd";
+ return "fail";
+ }
+
+ public void setName(String name){
+
+ this.name = name;
+ }
+ public void setPassword(String password){
+ this.password = password;
+ }
+ public String getMessage(){
+ return this.message;
+ }
+}
diff --git a/group04/474772605/src/com/coderising/action/Struts.java b/group04/474772605/src/com/coderising/action/Struts.java
index e2098dff74..7db0e4687f 100644
--- a/group04/474772605/src/com/coderising/action/Struts.java
+++ b/group04/474772605/src/com/coderising/action/Struts.java
@@ -21,126 +21,81 @@ public class Struts {
public static void main(String[] args) throws DocumentException {
-String actionName = "com.coderising.action.LoginAction";
+ String actionName = "login";
Map params = new HashMap();
params.put("name","test");
- params.put("password","1234");
-
-
- View view = Struts.runAction(actionName,params);
+ params.put("password","1234");
+ View view = Struts.runAction(actionName,params);
+ System.out.println(view.getJsp());
+ System.out.println(view.getParameters());
}
-
-/* //遍历当前节点下的所有节点
- public static void listNodes(Element node){
- System.out.println("当前节点的名称:" + node.getName());
- //首先获取当前节点的所有属性节点
- List list = node.attributes();
- //遍历属性节点
- for(Attribute attribute : list){
- System.out.println("属性"+attribute.getName() +":" + attribute.getValue());
- }
- //如果当前节点内容不为空,则输出
- if(!(node.getTextTrim().equals(""))){
- System.out.println( node.getName() + ":" + node.getText());
- }
- //同时迭代当前节点下面的所有子节点
- //使用递归
- Iterator iterator = node.elementIterator();
- while(iterator.hasNext()){
- Element e = iterator.next();
- listNodes(e);
- }
- } */
-
public static View runAction(String actionName, Map parameters) {
-
- SAXReader reader = new SAXReader();
+ View view = new View();
+ SAXReader reader = new SAXReader();
//读取文件 转换成Document
- org.dom4j.Document document;
- try {
- document = reader.read(new File("src/struts.xml"));
- Element root = document.getRootElement();
- List childList2 = root.elements("action");
- Iterator it = childList2.iterator();
- /* while (it.hasNext()){
- Element element = it.next();
- System.out.println("节点的名称" + element.getName() + "节点的值" + element.getText());
-
- }*/
- for (int i = 0; i < childList2.size(); i++) {
- List list = childList2.get(i).attributes();
- Iterator it1 = list.iterator();
- while(it1.hasNext()){
-
- Attribute attribute1 = it1.next();
- System.out.println(attribute1.getName());
- System.out.println(attribute1.getValue());
- System.out.println("==============");
-
- }
-
- for(Attribute attribute : list){
-
- if(actionName.equals(attribute.getValue())){
-
- String clazz = null;
-
- clazz = attribute.getValue();
- try {
- Object o = Class.forName(clazz).newInstance();
- try {
- Method m = o.getClass().getMethod("setName", String.class);
- Method m1 = o.getClass().getMethod("setPassword", String.class);
- Method m3 = o.getClass().getMethod("execute");
- try {
- m.invoke(o, parameters.get("name"));
- m1.invoke(o, parameters.get("password"));
- String result = (String) m3.invoke(o);
- System.out.println(result);
- } catch (IllegalArgumentException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (InvocationTargetException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- } catch (SecurityException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (NoSuchMethodException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
+ org.dom4j.Document document;
+ try {
+ document = reader.read(new File("src/struts.xml"));
+ Element root = document.getRootElement();
+ @SuppressWarnings("unchecked")
+ List elements = root.elements();
+ for (Element element : elements) {
+ Attribute actionAttribute = element.attribute("name");
+ Attribute classAttribute = element.attribute("class");
+ if(actionName.equals(actionAttribute.getValue())){
+ String clazz = null;
+ clazz = classAttribute.getValue();
+ Object o = Class.forName(clazz).newInstance();
+ for (Map.Entry entry : parameters.entrySet()) {
+ String name = entry.getKey();
+ String value =entry.getValue();
+ String methodname = "set"+name.substring(0,1).toUpperCase()+name.substring(1);
+ Method m = o.getClass().getMethod(methodname, String.class);
+ m.invoke(o, value);
+
+ }
+ Method m3 = o.getClass().getMethod("execute");
+ String result = (String) m3.invoke(o);
+ String jspPath = null;
+ List element1s = element.elements("result");
+ if(result.equals("success")){
+ for (int i = 0; i < element1s.size(); i++) {
+ Attribute attribute2 = element1s.get(i).attribute("name");
+ if (attribute2.getValue().equals("success")) {
+ jspPath = element1s.get(i).getStringValue();
+ }
+ }
+ }else if(result.equals("fail")){
+ for (int i = 0; i < element1s.size(); i++) {
+ Attribute attribute2 = element1s.get(i).attribute("name");
+ if (attribute2.getValue().equals("fail")) {
+ jspPath = element1s.get(i).getStringValue();
}
-
-
- } catch (InstantiationException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (IllegalAccessException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (ClassNotFoundException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } //根据class生成实例
- }
-
-
- }
-
- }
- } catch (DocumentException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- //获取根节点元素对象
-
-
-
-
+ }
+ }
+ HashMapviewparamterHashMap = new HashMap();
+ Method[]methods = o.getClass().getMethods();
+ String methodname;
+ for (int j = 0; j < o.getClass().getMethods().length; j++) {
+ methodname = methods[j].getName();
+ if(methodname.startsWith("get")&&!methodname.equals("getClass")){
+ String methodname1 = methods[j].getName();
+ methodname1 = methodname.substring(3,4).toUpperCase()+methodname1.substring(4);
+ viewparamterHashMap.put(methodname1, methods[j].invoke(o));
+ }
+ }
+ view.setJsp(jspPath);
+ view.setParameters(viewparamterHashMap);
+ return view;
+ }
+ }
+ } catch (Exception e) {
+ // TODO: handle exception
+ }
+ return null;
/*
0. 读取配置文件struts.xml
@@ -161,7 +116,7 @@ public static View runAction(String actionName, Map parameters)
*/
- return null;
- }
+
+ }
}
diff --git a/group04/474772605/src/struts.xml b/group04/474772605/src/struts.xml
index 90cf18b7da..8bd00bb1f0 100644
--- a/group04/474772605/src/struts.xml
+++ b/group04/474772605/src/struts.xml
@@ -6,6 +6,6 @@
/jsp/welcome.jsp
- /jsp/error.jsp
+ /jsp/error.jsp
\ No newline at end of file
From e01ba89120b5c5b347b17d3989d76a3c333c4811 Mon Sep 17 00:00:00 2001
From: Samson Shenglu Cao
Date: Sun, 12 Mar 2017 01:41:21 +0800
Subject: [PATCH 006/315] add unit test
---
.../src/com/coderising/array/ArrayUtil.java | 128 ++++++++++++------
.../com/coderising/array/ArrayUtilTest.java | 120 ++++++++++++++++
.../src/com/coderising/array/Main.java | 20 +++
3 files changed, 224 insertions(+), 44 deletions(-)
create mode 100644 group19/972815123/src/com/coderising/array/ArrayUtilTest.java
create mode 100644 group19/972815123/src/com/coderising/array/Main.java
diff --git a/group19/972815123/src/com/coderising/array/ArrayUtil.java b/group19/972815123/src/com/coderising/array/ArrayUtil.java
index fca1de56e4..b24534a1f6 100644
--- a/group19/972815123/src/com/coderising/array/ArrayUtil.java
+++ b/group19/972815123/src/com/coderising/array/ArrayUtil.java
@@ -16,10 +16,10 @@ public void reverseArray(int[] origin){
int tem = 0;
for(int i = 0, len = origin.length; i < len/2; i ++){
tem = origin[i];
- origin[i] = origin[len - i + 1];
- origin[len - i + 1] = tem;
+ origin[i] = origin[len - i - 1];
+ origin[len - i - 1] = tem;
}
-
+ System.out.println(join(origin, ","));
}
/**
@@ -33,12 +33,12 @@ public void reverseArray(int[] origin){
public int[] removeZero(int[] oldArray){
int withoutZeroSize = 0;
for(int i = 0, len = oldArray.length; i < len; i ++ ){
- if( oldArray[i] == 0){
+ if( oldArray[i] != 0){
withoutZeroSize ++;
}
}
int[] newArray = new int[withoutZeroSize];
- int point = 1;
+ int point = 0;
for(int i = 0 ,len = oldArray.length; i < len; i ++ ){
if( oldArray[i] != 0){
newArray[point] = oldArray[i];
@@ -57,19 +57,39 @@ public int[] removeZero(int[] oldArray){
*/
public int[] merge(int[] array1, int[] array2){
- int point2 = 0;
- int[] result = new int[array1.length + array2.length];
- int point1 = 0, len1 = array1.length;
- while(point1 < len1){
- if(array1[point1] < array2[point2]){
- result[point1 + point2] = array1[point1];
- point1 ++;
+ int point = 0;
+ int point2 = 0, point1 = 0;
+ int len1 = array1.length, len2 = array2.length;
+
+ int[] result = new int[len1 + len2];
+ while(point1 < len1 || point2 < len2){
+ if(point1 < len1 && point2 < len2){
+ if(array1[point1] <= array2[point2]){
+ result[point] = array1[point1];
+ point++;
+ point1++;
+ }else{
+ if(result[point - 1] == array2[point2]){
+ point2++;
+ }else{
+ result[point] = array2[point2];
+ point++;
+ point2++;
+ }
+ }
}else{
- result[point1 + point2] = array2[point2];
- point2 ++;
+ if(point1 < len1){
+ result[point] = array1[point1];
+ point++;
+ point1++;
+ }else{
+ result[point] = array2[point2];
+ point++;
+ point2++;
+ }
}
}
-
+ result = removeZero(result);
return result;
}
/**
@@ -97,24 +117,26 @@ public int[] grow(int [] oldArray, int size){
* @return
*/
public int[] fibonacci(int max){
- int[] result = {1,1,2};
- int a1 = 1, a2 = 2;
+ int[] result = {1,1};
if(max <= 1){
return null;
}else if(max == 2){
return result;
}else{
result = grow(result, 10);
- int index = 2;
- while(result[index] > max){
- if(result.length < index + 2){
+ int index = 1;
+ while(true){
+ index ++;
+ if(result.length < index + 1){
result = grow(result, 10);
}
- result[index + 1] = result[index -1] + result[index];
- index ++;
+ result[index] = result[index -1] + result[index - 2];
+ if(result[index] > max){
+ break;
+ }
}
}
- return result;
+ return removeZero(result);
}
/**
@@ -124,32 +146,36 @@ public int[] fibonacci(int max){
* @return
*/
public int[] getPrimes(int max){
- int[] temArr = null;
+ int[] temArr = {2};
if(max < 2){
return null;
}else if (max == 2){
- int[] re = {2};
- return re;
+ return temArr;
}else{
- temArr = new int[max/2];
- temArr[0] = 2;
- int index = 1;
- for(int i = 3; i < max ; i= i+2){
+ temArr = grow(temArr, 10);
+ int index = 0;
+ for(int i = 3;i < max; i ++){
boolean flag = true;
- int isql = (int) Math.sqrt(i);
- for(int j = 3; j < isql; j++){
- if(i % j == 0){
+ int iSqrt = (int) Math.sqrt(i);
+ for(int j = 0; j < index + 1; j ++){
+ if(iSqrt < temArr[j]){
+ break;
+ }
+ if(i % temArr[j] == 0){
flag = false;
+ break;
}
}
if(flag){
- temArr[index] = i;
index ++;
+ if(temArr.length < index + 1){
+ temArr = grow(temArr, 30);
+ }
+ temArr[index] = i;
}
}
}
- temArr = this.removeZero(temArr);
- return temArr;
+ return removeZero(temArr);
}
/**
@@ -163,17 +189,17 @@ public int[] getPerfectNumbers(int max){
int index = 0;
if(max < 6){
return null;
- }else{
- }
+ }
+
for (int n = 6; n <= max ; n ++){
- int[] allPrimeFactore = getPrimeFactors(n);
+ int[] allFactors = getAllFactors(n);
int sum = 0;
- for(int i = 0, len = allPrimeFactore.length; i < len; i ++){
- sum += allPrimeFactore[i];
+ for(int i = 0, len = allFactors.length; i < len; i ++){
+ sum += allFactors[i];
}
if(sum == n){
if(result.length < index + 1){
- result = this.grow(result, 1);
+ result = this.grow(result, 3);
}
result[index] = n;
index ++;
@@ -183,10 +209,24 @@ public int[] getPerfectNumbers(int max){
return removeZero(result);
}
- private int[] getPrimeFactors(int n){
+ public int[] getAllFactors(int n){
+ int[] result = new int[n];
+ int index = 0;
+ for(int i = 1; i < n; i++){
+ if(n % i == 0){
+ result[index] = i;
+ index ++;
+ }
+ }
+ return removeZero(result);
+ }
+
+ //分解因式算法
+ public int[] getPrimeFactors(int n){
int[] allPrimes = getPrimes(n);
int[] result = new int[allPrimes.length];
- int index = 0;
+ int index = 1;
+ result[0] = 1;
for(int i = 0, len = allPrimes.length; i < len; i ++){
int devide = n;
while(devide % allPrimes[i] == 0){
diff --git a/group19/972815123/src/com/coderising/array/ArrayUtilTest.java b/group19/972815123/src/com/coderising/array/ArrayUtilTest.java
new file mode 100644
index 0000000000..2fbd5ead5e
--- /dev/null
+++ b/group19/972815123/src/com/coderising/array/ArrayUtilTest.java
@@ -0,0 +1,120 @@
+package com.coderising.array;
+
+import static org.junit.Assert.*;
+
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import junit.framework.Assert;
+
+public class ArrayUtilTest {
+
+ private ArrayUtil au;
+
+ @BeforeClass
+ public static void setUpBeforeClass() throws Exception {
+ }
+
+ @AfterClass
+ public static void tearDownAfterClass() throws Exception {
+ }
+
+ @Before
+ public void setUp() throws Exception {
+ au = new ArrayUtil();
+ }
+
+ @After
+ public void tearDown() throws Exception {
+ }
+
+ @Test
+ public void testReverseArray() {
+ int[] test = {1,2,3};
+ au.reverseArray(test);
+ String result = au.join(test, "-");
+ Assert.assertEquals(result, "3-2-1");
+ }
+
+ @Test
+ public void testRemoveZero() {
+ int[] test = {1,3,4,5,0,0,6,6,0,5,4,7,6,7,0,5};
+ test = au.removeZero(test);
+ String result = au.join(test, ",");
+ Assert.assertEquals(result, "1,3,4,5,6,6,5,4,7,6,7,5");
+ }
+
+ @Test
+ public void testMerge() {
+ int[] arr1 = {3, 5, 7,8};
+ int[] arr2 = {4, 5, 6,7};
+ int[] test = au.merge(arr1, arr2);
+ String result = au.join(test, ",");
+ System.out.println(result);
+ Assert.assertEquals(result, "3,4,5,6,7,8");
+ }
+
+ @Test
+ public void testGrow() {
+ int[] test = {3,5,6};
+ test = au.grow(test, 2);
+ String result = au.join(test, ",");
+ System.out.println(result);
+ System.out.println(test.length);
+ Assert.assertTrue(5 == test.length);
+ }
+
+ @Test
+ public void testFibonacci() {
+ int[] test = au.fibonacci(250);
+ String result = au.join(test, ",");
+ System.out.println(result);
+ Assert.assertEquals(result, "1,1,2,3,5,8,13,21,34,55,89,144,233,377");
+ }
+
+ @Test
+ public void testGetPrimes() {
+ //2,3,5,7,11,13,17,19
+ int[] test = au.getPrimes(23);
+ String result = au.join(test, ",");
+ System.out.println(result);
+ Assert.assertEquals(result, "2,3,5,7,11,13,17,19");
+ }
+
+ @Test
+ public void testGetPerfectNumbers() {
+ int[] test = au.getPerfectNumbers(10000);
+ String result = au.join(test, ",");
+ System.out.println(result);
+ Assert.assertEquals(result, "6,28,496,8128");
+ }
+
+
+ @Test
+ public void testGetAllFactors(){
+ int[] test = au.getAllFactors(98);
+ String result = au.join(test, ",");
+ System.out.println(result);
+ Assert.fail();
+ }
+
+ @Test
+ public void testGetPrimeFactors(){
+ int[] test = au.getPrimeFactors(98);
+ String result = au.join(test, ",");
+ System.out.println(result);
+ Assert.fail();
+ }
+
+ @Test
+ public void testJoin() {
+ int[] test = {1,2,3};
+ String result = au.join(test, ",");
+
+ Assert.assertEquals(result, "1,2,3");
+ }
+
+}
diff --git a/group19/972815123/src/com/coderising/array/Main.java b/group19/972815123/src/com/coderising/array/Main.java
new file mode 100644
index 0000000000..5c8a9abcc6
--- /dev/null
+++ b/group19/972815123/src/com/coderising/array/Main.java
@@ -0,0 +1,20 @@
+package com.coderising.array;
+
+public class Main {
+
+ public static void main(String[] args) {
+ ArrayUtil au = new ArrayUtil();
+// int[] test = {1,2};
+// au.reverseArray(test);
+// String result = au.join(test, "-");
+
+
+ int[] arr1 = {3, 5, 7,8};
+ int[] arr2 = {4, 5, 6,7};
+ int[] test = au.merge(arr1, arr2);
+ String result = au.join(test, ",");
+
+ System.out.println(result);
+ }
+
+}
From fb079fa52524dc983f7954bc9a709c8a69ef0545 Mon Sep 17 00:00:00 2001
From: Administrator
Date: Sun, 12 Mar 2017 08:55:30 +0800
Subject: [PATCH 007/315] =?UTF-8?q?add=20=E6=95=B0=E6=8D=AE=E7=BB=93?=
=?UTF-8?q?=E6=9E=84(=E4=B8=89)=20=E5=8D=95=E5=90=91=E9=93=BE=E8=A1=A8?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../one/src/org/coding/one/LinkedList.java | 3 +
.../one/src/org/coding/three/list/List.java | 9 +
.../coding/three/list/impl/LinkedList.java | 422 ++++++++++++++++
.../three/list/impl/LinkedListTest.java | 477 ++++++++++++++++++
4 files changed, 911 insertions(+)
create mode 100644 group04/498654356/one/src/org/coding/three/list/List.java
create mode 100644 group04/498654356/one/src/org/coding/three/list/impl/LinkedList.java
create mode 100644 group04/498654356/one/test/org/coding/three/list/impl/LinkedListTest.java
diff --git a/group04/498654356/one/src/org/coding/one/LinkedList.java b/group04/498654356/one/src/org/coding/one/LinkedList.java
index 183f634418..3f98db326f 100644
--- a/group04/498654356/one/src/org/coding/one/LinkedList.java
+++ b/group04/498654356/one/src/org/coding/one/LinkedList.java
@@ -1,5 +1,8 @@
package org.coding.one;
+/**
+ * 双链表/双向链表
+ */
public class LinkedList implements List {
private Node first;
diff --git a/group04/498654356/one/src/org/coding/three/list/List.java b/group04/498654356/one/src/org/coding/three/list/List.java
new file mode 100644
index 0000000000..d06cf962da
--- /dev/null
+++ b/group04/498654356/one/src/org/coding/three/list/List.java
@@ -0,0 +1,9 @@
+package org.coding.three.list;
+
+public interface List {
+ public void add(Object o);
+ public void add(int index, Object o);
+ public Object get(int index);
+ public Object remove(int index);
+ public int size();
+}
diff --git a/group04/498654356/one/src/org/coding/three/list/impl/LinkedList.java b/group04/498654356/one/src/org/coding/three/list/impl/LinkedList.java
new file mode 100644
index 0000000000..ef38ca811d
--- /dev/null
+++ b/group04/498654356/one/src/org/coding/three/list/impl/LinkedList.java
@@ -0,0 +1,422 @@
+package org.coding.three.list.impl;
+
+import java.util.Arrays;
+import java.util.Iterator;
+
+import org.coding.three.list.List;
+/**
+ * 单链表/单向链表
+ */
+public class LinkedList implements List {
+ /**
+ * 0. head 节点存储数据
+ * 1. 这里的 head 第一次添加之后 "引用" 将不再改变;"值" 可以被修改已表示往首节点插入新的值。
+ * 2. 可以将 head 修改为对 node 引用, 不存储任何数据。
+ */
+ private Node head;
+
+ public void add(Object o){
+ Node node = new Node(o);
+ if(head == null){ //第一次
+ head = node;
+ } else {
+ getNode(size() - 1).next = node;
+ }
+ }
+
+ private Node getNode(int index) {
+ checkIndex(index);
+ Node node = head;
+ for(int i = 0; i < index; i++) {
+ node = node.next;
+ }
+ return node;
+ }
+
+ private void checkIndex(int index) {
+ int size = size();
+ if(index < 0 || index > (size - 1)) {
+ throw new IndexOutOfBoundsException("size = " + size + ", index = " + index);
+ }
+ }
+ public void add(int index , Object o){
+ checkIndex(index);
+ if(index == 0) { //更新 head 的值, 将旧值创建新的Node插入到 head 后
+ Object data = head.data;
+ head.data = o;
+ Node node = new Node(data);
+ node.next = head.next;
+ head.next = node;
+ } else {
+ Node pre = getNode(index - 1);
+ Node node = new Node(o);
+ node.next = pre.next;
+ pre.next = node;
+ }
+ }
+ public Object get(int index){
+ checkIndex(index);
+ return getNode(index).data;
+ }
+ public Object remove(int index){
+ checkIndex(index);
+ Object data = null;
+ if(index == 0) {
+ Node next = head.next;
+ data = head.data;
+ if(next == null) {
+ head = null;
+ } else {
+ head.data = next.data;
+ head.next = next.next;
+ next.next = null;
+ }
+ } else {
+ Node pre = getNode(index - 1);
+ Node node = pre.next;
+ pre.next = node.next;
+ node.next = null;
+ data = node.data;
+ }
+ return data;
+ }
+
+ public int size(){
+ Node temp = head;
+ int size = 0;
+ while(temp != null) {
+ size++;
+ temp = temp.next;
+ }
+ return size;
+ }
+
+ public void addFirst(Object o){
+ add(0, o);
+ }
+ public void addLast(Object o){
+ add(o);
+ }
+ public Object removeFirst(){
+ return remove(0);
+ }
+ public Object removeLast(){
+ return remove(size() - 1);
+ }
+ public Iterator> iterator(){
+ return new LinkedIterator();
+ }
+
+ class LinkedIterator implements Iterator