diff --git a/group09/41689722.eulerlcs/20170226-eulerlcs-collection/collection-aggregator/src/site/.gitkeep b/group09/41689722.eulerlcs/1.article/.gitkeep similarity index 100% rename from group09/41689722.eulerlcs/20170226-eulerlcs-collection/collection-aggregator/src/site/.gitkeep rename to group09/41689722.eulerlcs/1.article/.gitkeep diff --git a/group09/41689722.eulerlcs/2.code/.gitignore b/group09/41689722.eulerlcs/2.code/.gitignore new file mode 100644 index 0000000000..c2be49c379 --- /dev/null +++ b/group09/41689722.eulerlcs/2.code/.gitignore @@ -0,0 +1,6 @@ +.metadata/ +.recommenders/ +**/.settings/ +**/target/ +**/.classpath +**/.project diff --git a/group09/41689722.eulerlcs/20170226-eulerlcs-collection/collection-aggregator/pom.xml b/group09/41689722.eulerlcs/2.code/jmr-01-aggregator/pom.xml similarity index 51% rename from group09/41689722.eulerlcs/20170226-eulerlcs-collection/collection-aggregator/pom.xml rename to group09/41689722.eulerlcs/2.code/jmr-01-aggregator/pom.xml index a09edb357b..be065e6a95 100644 --- a/group09/41689722.eulerlcs/20170226-eulerlcs-collection/collection-aggregator/pom.xml +++ b/group09/41689722.eulerlcs/2.code/jmr-01-aggregator/pom.xml @@ -1,13 +1,16 @@ 4.0.0 - com.eulerlcs.collection - collection-aggregator + com.github.eulerlcs + jmr-01-aggregator 0.0.1-SNAPSHOT pom + eulerlcs master java road aggregator - ../collection-parent - ../collection-lib + ../jmr-02-parent + ../jmr-11-challenge + ../jmr-61-170226-collection + ../jmr-61-170305-litestruts \ No newline at end of file diff --git a/group09/41689722.eulerlcs/20170226-eulerlcs-collection/collection-lib/src/main/resources/.gitkeep b/group09/41689722.eulerlcs/2.code/jmr-01-aggregator/src/site/.gitkeep similarity index 100% rename from group09/41689722.eulerlcs/20170226-eulerlcs-collection/collection-lib/src/main/resources/.gitkeep rename to group09/41689722.eulerlcs/2.code/jmr-01-aggregator/src/site/.gitkeep diff --git a/group09/41689722.eulerlcs/20170226-eulerlcs-collection/collection-parent/pom.xml b/group09/41689722.eulerlcs/2.code/jmr-02-parent/pom.xml similarity index 75% rename from group09/41689722.eulerlcs/20170226-eulerlcs-collection/collection-parent/pom.xml rename to group09/41689722.eulerlcs/2.code/jmr-02-parent/pom.xml index 6f05e517e2..8e6a7752f7 100644 --- a/group09/41689722.eulerlcs/20170226-eulerlcs-collection/collection-parent/pom.xml +++ b/group09/41689722.eulerlcs/2.code/jmr-02-parent/pom.xml @@ -1,23 +1,44 @@ 4.0.0 - com.eulerlcs.collection - collection-parent + com.github.eulerlcs + jmr-02-parent 0.0.1-SNAPSHOT pom + eulerlcs master java road parent - 1.7.23 + 1.7.24 4.12 2.17 1.8 1.8 - + + commons-digester + commons-digester + 2.1 + + + org.jdom + jdom2 + 2.0.6 + + + dom4j + dom4j + 1.6.1 + + + org.projectlombok + lombok + 1.16.14 + provided + org.slf4j slf4j-api @@ -34,10 +55,15 @@ ${junit.version} test + + com.github.stefanbirkner + system-rules + 1.16.1 + test + - @@ -94,11 +120,6 @@ true - - org.apache.maven.plugins - maven-checkstyle-plugin - 2.17 - diff --git a/group09/41689722.eulerlcs/20170226-eulerlcs-collection/collection-lib/src/test/resources/.gitkeep b/group09/41689722.eulerlcs/2.code/jmr-02-parent/src/site/.gitkeep similarity index 100% rename from group09/41689722.eulerlcs/20170226-eulerlcs-collection/collection-lib/src/test/resources/.gitkeep rename to group09/41689722.eulerlcs/2.code/jmr-02-parent/src/site/.gitkeep diff --git a/group09/41689722.eulerlcs/2.code/jmr-11-challenge/data/classloader/com/github/eulerlcs/jmr/challenge/classloader/sample/CalculatorAdvanced.class b/group09/41689722.eulerlcs/2.code/jmr-11-challenge/data/classloader/com/github/eulerlcs/jmr/challenge/classloader/sample/CalculatorAdvanced.class new file mode 100644 index 0000000000..d1655401e6 Binary files /dev/null and b/group09/41689722.eulerlcs/2.code/jmr-11-challenge/data/classloader/com/github/eulerlcs/jmr/challenge/classloader/sample/CalculatorAdvanced.class differ diff --git a/group09/41689722.eulerlcs/2.code/jmr-11-challenge/data/classloader/com/github/eulerlcs/jmr/challenge/classloader/sample/CalculatorBasic.class b/group09/41689722.eulerlcs/2.code/jmr-11-challenge/data/classloader/com/github/eulerlcs/jmr/challenge/classloader/sample/CalculatorBasic.class new file mode 100644 index 0000000000..41c161a767 Binary files /dev/null and b/group09/41689722.eulerlcs/2.code/jmr-11-challenge/data/classloader/com/github/eulerlcs/jmr/challenge/classloader/sample/CalculatorBasic.class differ diff --git a/group09/41689722.eulerlcs/2.code/jmr-11-challenge/data/classloader/com/github/eulerlcs/jmr/challenge/classloader/sample/Sample.class b/group09/41689722.eulerlcs/2.code/jmr-11-challenge/data/classloader/com/github/eulerlcs/jmr/challenge/classloader/sample/Sample.class new file mode 100644 index 0000000000..640df1edc0 Binary files /dev/null and b/group09/41689722.eulerlcs/2.code/jmr-11-challenge/data/classloader/com/github/eulerlcs/jmr/challenge/classloader/sample/Sample.class differ diff --git a/group09/41689722.eulerlcs/2.code/jmr-11-challenge/data/xmlparser/hello.xml b/group09/41689722.eulerlcs/2.code/jmr-11-challenge/data/xmlparser/hello.xml new file mode 100644 index 0000000000..748019e106 --- /dev/null +++ b/group09/41689722.eulerlcs/2.code/jmr-11-challenge/data/xmlparser/hello.xml @@ -0,0 +1,5 @@ + + + a.txt + b.txt + diff --git a/group09/41689722.eulerlcs/2.code/jmr-11-challenge/pom.xml b/group09/41689722.eulerlcs/2.code/jmr-11-challenge/pom.xml new file mode 100644 index 0000000000..589a5f69ee --- /dev/null +++ b/group09/41689722.eulerlcs/2.code/jmr-11-challenge/pom.xml @@ -0,0 +1,48 @@ + + 4.0.0 + + com.github.eulerlcs + jmr-02-parent + 0.0.1-SNAPSHOT + ../jmr-02-parent/pom.xml + + jmr-11-challenge + eulerlcs master java road challenge + + + + + commons-digester + commons-digester + + + org.jdom + jdom2 + + + dom4j + dom4j + + + org.projectlombok + lombok + + + org.slf4j + slf4j-api + + + org.slf4j + slf4j-log4j12 + + + junit + junit + + + com.github.stefanbirkner + system-rules + + + \ No newline at end of file diff --git a/group09/41689722.eulerlcs/2.code/jmr-11-challenge/src/main/java/com/coderising/litestruts/LoginAction.java b/group09/41689722.eulerlcs/2.code/jmr-11-challenge/src/main/java/com/coderising/litestruts/LoginAction.java new file mode 100644 index 0000000000..dcdbe226ed --- /dev/null +++ b/group09/41689722.eulerlcs/2.code/jmr-11-challenge/src/main/java/com/coderising/litestruts/LoginAction.java @@ -0,0 +1,39 @@ +package com.coderising.litestruts; + +/** + * 这是一个用来展示登录的业务类, 其中的用户名和密码都是硬编码的。 + * @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/group09/41689722.eulerlcs/2.code/jmr-11-challenge/src/main/java/com/coderising/litestruts/Struts.java b/group09/41689722.eulerlcs/2.code/jmr-11-challenge/src/main/java/com/coderising/litestruts/Struts.java new file mode 100644 index 0000000000..85e2e22de3 --- /dev/null +++ b/group09/41689722.eulerlcs/2.code/jmr-11-challenge/src/main/java/com/coderising/litestruts/Struts.java @@ -0,0 +1,34 @@ +package com.coderising.litestruts; + +import java.util.Map; + + + +public class Struts { + + public static View runAction(String actionName, Map 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字段中。 + + */ + + return null; + } + +} diff --git a/group09/41689722.eulerlcs/2.code/jmr-11-challenge/src/main/java/com/coderising/litestruts/StrutsTest.java b/group09/41689722.eulerlcs/2.code/jmr-11-challenge/src/main/java/com/coderising/litestruts/StrutsTest.java new file mode 100644 index 0000000000..b8c81faf3c --- /dev/null +++ b/group09/41689722.eulerlcs/2.code/jmr-11-challenge/src/main/java/com/coderising/litestruts/StrutsTest.java @@ -0,0 +1,43 @@ +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/group09/41689722.eulerlcs/2.code/jmr-11-challenge/src/main/java/com/coderising/litestruts/View.java b/group09/41689722.eulerlcs/2.code/jmr-11-challenge/src/main/java/com/coderising/litestruts/View.java new file mode 100644 index 0000000000..07df2a5dab --- /dev/null +++ b/group09/41689722.eulerlcs/2.code/jmr-11-challenge/src/main/java/com/coderising/litestruts/View.java @@ -0,0 +1,23 @@ +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/group09/41689722.eulerlcs/2.code/jmr-11-challenge/src/main/java/com/coderising/litestruts/struts.xml b/group09/41689722.eulerlcs/2.code/jmr-11-challenge/src/main/java/com/coderising/litestruts/struts.xml new file mode 100644 index 0000000000..dd598a3664 --- /dev/null +++ b/group09/41689722.eulerlcs/2.code/jmr-11-challenge/src/main/java/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/group09/41689722.eulerlcs/2.code/jmr-11-challenge/src/main/java/com/github/eulerlcs/jmr/challenge/classloader/core/FileSystemClassLoader.java b/group09/41689722.eulerlcs/2.code/jmr-11-challenge/src/main/java/com/github/eulerlcs/jmr/challenge/classloader/core/FileSystemClassLoader.java new file mode 100644 index 0000000000..82c8b60d56 --- /dev/null +++ b/group09/41689722.eulerlcs/2.code/jmr-11-challenge/src/main/java/com/github/eulerlcs/jmr/challenge/classloader/core/FileSystemClassLoader.java @@ -0,0 +1,58 @@ +package com.github.eulerlcs.jmr.challenge.classloader.core; + +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; + +public class FileSystemClassLoader extends ClassLoader { + + private String rootDir; + + public FileSystemClassLoader(String rootDir) { + this.rootDir = rootDir; + } + + @Override + protected Class findClass(String name) throws ClassNotFoundException { + byte[] classData = getClassData(name); + if (classData == null) { + throw new ClassNotFoundException(); + } else { + return defineClass(name, classData, 0, classData.length); + } + } + + private byte[] getClassData(String className) { + String path = classNameToPath(className); + InputStream ins = null; + try { + ins = new FileInputStream(path); + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + int bufferSize = 4096; + byte[] buffer = new byte[bufferSize]; + int bytesNumRead = 0; + while ((bytesNumRead = ins.read(buffer)) != -1) { + baos.write(buffer, 0, bytesNumRead); + } + return baos.toByteArray(); + } catch (IOException e) { + e.printStackTrace(); + } finally { + if (ins != null) { + try { + ins.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + + return null; + } + + private String classNameToPath(String className) { + return rootDir + File.separatorChar + className.replace('.', File.separatorChar) + ".class"; + } +} diff --git a/group09/41689722.eulerlcs/2.code/jmr-11-challenge/src/main/java/com/github/eulerlcs/jmr/challenge/classloader/core/ICalculator.java b/group09/41689722.eulerlcs/2.code/jmr-11-challenge/src/main/java/com/github/eulerlcs/jmr/challenge/classloader/core/ICalculator.java new file mode 100644 index 0000000000..697bf8065f --- /dev/null +++ b/group09/41689722.eulerlcs/2.code/jmr-11-challenge/src/main/java/com/github/eulerlcs/jmr/challenge/classloader/core/ICalculator.java @@ -0,0 +1,5 @@ +package com.github.eulerlcs.jmr.challenge.classloader.core; + +public interface ICalculator extends Versioned { + String calculate(String expression); +} diff --git a/group09/41689722.eulerlcs/2.code/jmr-11-challenge/src/main/java/com/github/eulerlcs/jmr/challenge/classloader/core/NetworkClassLoader.java b/group09/41689722.eulerlcs/2.code/jmr-11-challenge/src/main/java/com/github/eulerlcs/jmr/challenge/classloader/core/NetworkClassLoader.java new file mode 100644 index 0000000000..0241e92a5c --- /dev/null +++ b/group09/41689722.eulerlcs/2.code/jmr-11-challenge/src/main/java/com/github/eulerlcs/jmr/challenge/classloader/core/NetworkClassLoader.java @@ -0,0 +1,48 @@ +package com.github.eulerlcs.jmr.challenge.classloader.core; + +import java.io.ByteArrayOutputStream; +import java.io.InputStream; +import java.net.URL; + +public class NetworkClassLoader extends ClassLoader { + + private String rootUrl; + + public NetworkClassLoader(String rootUrl) { + this.rootUrl = rootUrl; + } + + protected Class findClass(String name) throws ClassNotFoundException { + byte[] classData = getClassData(name); + if (classData == null) { + throw new ClassNotFoundException(); + } + else { + return defineClass(name, classData, 0, classData.length); + } + } + + private byte[] getClassData(String className) { + String path = classNameToPath(className); + try { + URL url = new URL(path); + InputStream ins = url.openStream(); + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + int bufferSize = 4096; + byte[] buffer = new byte[bufferSize]; + int bytesNumRead = 0; + while ((bytesNumRead = ins.read(buffer)) != -1) { + baos.write(buffer, 0, bytesNumRead); + } + return baos.toByteArray(); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + private String classNameToPath(String className) { + return rootUrl + "/" + + className.replace('.', '/') + ".class"; + } +} diff --git a/group09/41689722.eulerlcs/2.code/jmr-11-challenge/src/main/java/com/github/eulerlcs/jmr/challenge/classloader/core/Versioned.java b/group09/41689722.eulerlcs/2.code/jmr-11-challenge/src/main/java/com/github/eulerlcs/jmr/challenge/classloader/core/Versioned.java new file mode 100644 index 0000000000..34dfacbbd1 --- /dev/null +++ b/group09/41689722.eulerlcs/2.code/jmr-11-challenge/src/main/java/com/github/eulerlcs/jmr/challenge/classloader/core/Versioned.java @@ -0,0 +1,5 @@ +package com.github.eulerlcs.jmr.challenge.classloader.core; + +public interface Versioned { + String getVersion(); +} diff --git a/group09/41689722.eulerlcs/2.code/jmr-11-challenge/src/main/java/com/github/eulerlcs/jmr/challenge/classloader/driver/CalculatorTest.java b/group09/41689722.eulerlcs/2.code/jmr-11-challenge/src/main/java/com/github/eulerlcs/jmr/challenge/classloader/driver/CalculatorTest.java new file mode 100644 index 0000000000..d19ee1dbe0 --- /dev/null +++ b/group09/41689722.eulerlcs/2.code/jmr-11-challenge/src/main/java/com/github/eulerlcs/jmr/challenge/classloader/driver/CalculatorTest.java @@ -0,0 +1,24 @@ +package com.github.eulerlcs.jmr.challenge.classloader.driver; + +import com.github.eulerlcs.jmr.challenge.classloader.core.ICalculator; +import com.github.eulerlcs.jmr.challenge.classloader.core.NetworkClassLoader; + +public class CalculatorTest { + + public static void main(String[] args) { + String url = "http://localhost:8080/ClassloaderTest/classes"; + NetworkClassLoader ncl = new NetworkClassLoader(url); + String basicClassName = "com.example.CalculatorBasic"; + String advancedClassName = "com.example.CalculatorAdvanced"; + try { + Class clazz = ncl.loadClass(basicClassName); + ICalculator calculator = (ICalculator) clazz.newInstance(); + System.out.println(calculator.getVersion()); + clazz = ncl.loadClass(advancedClassName); + calculator = (ICalculator) clazz.newInstance(); + System.out.println(calculator.getVersion()); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/group09/41689722.eulerlcs/2.code/jmr-11-challenge/src/main/java/com/github/eulerlcs/jmr/challenge/classloader/driver/ClassIdentity.java b/group09/41689722.eulerlcs/2.code/jmr-11-challenge/src/main/java/com/github/eulerlcs/jmr/challenge/classloader/driver/ClassIdentity.java new file mode 100644 index 0000000000..3a9226b8ca --- /dev/null +++ b/group09/41689722.eulerlcs/2.code/jmr-11-challenge/src/main/java/com/github/eulerlcs/jmr/challenge/classloader/driver/ClassIdentity.java @@ -0,0 +1,36 @@ +package com.github.eulerlcs.jmr.challenge.classloader.driver; + +import java.io.File; +import java.lang.reflect.Method; + +import com.github.eulerlcs.jmr.challenge.classloader.core.FileSystemClassLoader; + +public class ClassIdentity { + + public static void main(String[] args) { + new ClassIdentity().testClassIdentity(); + } + + public void testClassIdentity() { + String userDir = System.getProperty("user.dir"); + String classDataRootPath = userDir + File.separator + "data" + File.separator + "classloader"; + + FileSystemClassLoader fscl1 = new FileSystemClassLoader(classDataRootPath); + FileSystemClassLoader fscl2 = new FileSystemClassLoader(classDataRootPath); + String className = "com.github.eulerlcs.jmr.challenge.classloader.sample.Sample"; + + try { + Class class1 = fscl1.loadClass(className); + Object obj1 = class1.newInstance(); + + Class class2 = fscl2.loadClass(className); + Object obj2 = class2.newInstance(); + + Method setSampleMethod = class1.getMethod("setSample", java.lang.Object.class); + + setSampleMethod.invoke(obj1, obj2); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/group09/41689722.eulerlcs/2.code/jmr-11-challenge/src/main/java/com/github/eulerlcs/jmr/challenge/classloader/driver/ClassLoaderTree.java b/group09/41689722.eulerlcs/2.code/jmr-11-challenge/src/main/java/com/github/eulerlcs/jmr/challenge/classloader/driver/ClassLoaderTree.java new file mode 100644 index 0000000000..38916b6db5 --- /dev/null +++ b/group09/41689722.eulerlcs/2.code/jmr-11-challenge/src/main/java/com/github/eulerlcs/jmr/challenge/classloader/driver/ClassLoaderTree.java @@ -0,0 +1,12 @@ +package com.github.eulerlcs.jmr.challenge.classloader.driver; + +public class ClassLoaderTree { + + public static void main(String[] args) { + ClassLoader loader = ClassLoaderTree.class.getClassLoader(); + while (loader != null) { + System.out.println(loader.toString()); + loader = loader.getParent(); + } + } +} diff --git a/group09/41689722.eulerlcs/2.code/jmr-11-challenge/src/main/java/com/github/eulerlcs/jmr/challenge/classloader/package-info.java b/group09/41689722.eulerlcs/2.code/jmr-11-challenge/src/main/java/com/github/eulerlcs/jmr/challenge/classloader/package-info.java new file mode 100644 index 0000000000..d35a4ee992 --- /dev/null +++ b/group09/41689722.eulerlcs/2.code/jmr-11-challenge/src/main/java/com/github/eulerlcs/jmr/challenge/classloader/package-info.java @@ -0,0 +1,7 @@ +/** + * download from ibm developerworks + * + * @see https://www.ibm.com/developerworks/cn/java/j-lo-classloader/ + */ +package com.github.eulerlcs.jmr.challenge.classloader; \ No newline at end of file diff --git a/group09/41689722.eulerlcs/2.code/jmr-11-challenge/src/main/java/com/github/eulerlcs/jmr/challenge/classloader/sampleRename/CalculatorAdvanced.java b/group09/41689722.eulerlcs/2.code/jmr-11-challenge/src/main/java/com/github/eulerlcs/jmr/challenge/classloader/sampleRename/CalculatorAdvanced.java new file mode 100644 index 0000000000..9076a4f4c8 --- /dev/null +++ b/group09/41689722.eulerlcs/2.code/jmr-11-challenge/src/main/java/com/github/eulerlcs/jmr/challenge/classloader/sampleRename/CalculatorAdvanced.java @@ -0,0 +1,15 @@ +package com.github.eulerlcs.jmr.challenge.classloader.sampleRename; + +import com.github.eulerlcs.jmr.challenge.classloader.core.ICalculator; + +public class CalculatorAdvanced implements ICalculator { + + public String calculate(String expression) { + return "Result is " + expression; + } + + public String getVersion() { + return "2.0"; + } + +} diff --git a/group09/41689722.eulerlcs/2.code/jmr-11-challenge/src/main/java/com/github/eulerlcs/jmr/challenge/classloader/sampleRename/CalculatorBasic.java b/group09/41689722.eulerlcs/2.code/jmr-11-challenge/src/main/java/com/github/eulerlcs/jmr/challenge/classloader/sampleRename/CalculatorBasic.java new file mode 100644 index 0000000000..d5f7b054dd --- /dev/null +++ b/group09/41689722.eulerlcs/2.code/jmr-11-challenge/src/main/java/com/github/eulerlcs/jmr/challenge/classloader/sampleRename/CalculatorBasic.java @@ -0,0 +1,15 @@ +package com.github.eulerlcs.jmr.challenge.classloader.sampleRename; + +import com.github.eulerlcs.jmr.challenge.classloader.core.ICalculator; + +public class CalculatorBasic implements ICalculator { + + public String calculate(String expression) { + return expression; + } + + public String getVersion() { + return "1.0"; + } + +} diff --git a/group09/41689722.eulerlcs/2.code/jmr-11-challenge/src/main/java/com/github/eulerlcs/jmr/challenge/classloader/sampleRename/Sample.java b/group09/41689722.eulerlcs/2.code/jmr-11-challenge/src/main/java/com/github/eulerlcs/jmr/challenge/classloader/sampleRename/Sample.java new file mode 100644 index 0000000000..c67a7278e8 --- /dev/null +++ b/group09/41689722.eulerlcs/2.code/jmr-11-challenge/src/main/java/com/github/eulerlcs/jmr/challenge/classloader/sampleRename/Sample.java @@ -0,0 +1,10 @@ +package com.github.eulerlcs.jmr.challenge.classloader.sampleRename; + +public class Sample { + @SuppressWarnings("unused") + private Sample instance; + + public void setSample(Object instance) { + this.instance = (Sample) instance; + } +} diff --git a/group09/41689722.eulerlcs/2.code/jmr-11-challenge/src/main/java/com/github/eulerlcs/jmr/challenge/systemrules/AppWithExit.java b/group09/41689722.eulerlcs/2.code/jmr-11-challenge/src/main/java/com/github/eulerlcs/jmr/challenge/systemrules/AppWithExit.java new file mode 100644 index 0000000000..2afd5b2074 --- /dev/null +++ b/group09/41689722.eulerlcs/2.code/jmr-11-challenge/src/main/java/com/github/eulerlcs/jmr/challenge/systemrules/AppWithExit.java @@ -0,0 +1,13 @@ +package com.github.eulerlcs.jmr.challenge.systemrules; + +public class AppWithExit { + public static String message; + + public static void doSomethingAndExit() { + message = "exit ..."; + System.exit(1); + } + + public static void doNothing() { + } +} \ No newline at end of file diff --git a/group09/41689722.eulerlcs/2.code/jmr-11-challenge/src/main/java/com/github/eulerlcs/jmr/challenge/systemrules/package-info.java b/group09/41689722.eulerlcs/2.code/jmr-11-challenge/src/main/java/com/github/eulerlcs/jmr/challenge/systemrules/package-info.java new file mode 100644 index 0000000000..1710e69d47 --- /dev/null +++ b/group09/41689722.eulerlcs/2.code/jmr-11-challenge/src/main/java/com/github/eulerlcs/jmr/challenge/systemrules/package-info.java @@ -0,0 +1,5 @@ +/** + * copy from http://stefanbirkner.github.io/system-rules/index.html + */ + +package com.github.eulerlcs.jmr.challenge.systemrules; \ No newline at end of file diff --git a/group09/41689722.eulerlcs/2.code/jmr-11-challenge/src/main/java/com/github/eulerlcs/jmr/challenge/xmlparser/digester/core/HelloDigester.java b/group09/41689722.eulerlcs/2.code/jmr-11-challenge/src/main/java/com/github/eulerlcs/jmr/challenge/xmlparser/digester/core/HelloDigester.java new file mode 100644 index 0000000000..3f58d74c7f --- /dev/null +++ b/group09/41689722.eulerlcs/2.code/jmr-11-challenge/src/main/java/com/github/eulerlcs/jmr/challenge/xmlparser/digester/core/HelloDigester.java @@ -0,0 +1,17 @@ +package com.github.eulerlcs.jmr.challenge.xmlparser.digester.core; + +import org.apache.commons.digester.Digester; + +import com.github.eulerlcs.jmr.challenge.xmlparser.digester.entity.Hello; + +public class HelloDigester { + public static Digester newInstance() { + Digester d = new Digester(); + + d.addObjectCreate("files", Hello.class); + d.addSetProperties("files"); + d.addRuleSet(new HelloFileRulerSet("files/")); + + return d; + } +} diff --git a/group09/41689722.eulerlcs/2.code/jmr-11-challenge/src/main/java/com/github/eulerlcs/jmr/challenge/xmlparser/digester/core/HelloFileRulerSet.java b/group09/41689722.eulerlcs/2.code/jmr-11-challenge/src/main/java/com/github/eulerlcs/jmr/challenge/xmlparser/digester/core/HelloFileRulerSet.java new file mode 100644 index 0000000000..3d62c8c93e --- /dev/null +++ b/group09/41689722.eulerlcs/2.code/jmr-11-challenge/src/main/java/com/github/eulerlcs/jmr/challenge/xmlparser/digester/core/HelloFileRulerSet.java @@ -0,0 +1,28 @@ +package com.github.eulerlcs.jmr.challenge.xmlparser.digester.core; + +import org.apache.commons.digester.Digester; +import org.apache.commons.digester.RuleSetBase; + +import com.github.eulerlcs.jmr.challenge.xmlparser.digester.entity.HelloFile; + +final class HelloFileRulerSet extends RuleSetBase { + protected String prefix = null; + + public HelloFileRulerSet() { + this(""); + } + + public HelloFileRulerSet(String prefix) { + super(); + this.namespaceURI = null; + this.prefix = prefix; + } + + @Override + public void addRuleInstances(Digester digester) { + digester.addObjectCreate(prefix + "file", HelloFile.class); + digester.addSetProperties(prefix + "file", "dir", "path"); + digester.addBeanPropertySetter(prefix + "file", "name"); + digester.addSetNext(prefix + "file", "addFile"); + } +} diff --git a/group09/41689722.eulerlcs/2.code/jmr-11-challenge/src/main/java/com/github/eulerlcs/jmr/challenge/xmlparser/digester/driver/Driver.java b/group09/41689722.eulerlcs/2.code/jmr-11-challenge/src/main/java/com/github/eulerlcs/jmr/challenge/xmlparser/digester/driver/Driver.java new file mode 100644 index 0000000000..59a2987909 --- /dev/null +++ b/group09/41689722.eulerlcs/2.code/jmr-11-challenge/src/main/java/com/github/eulerlcs/jmr/challenge/xmlparser/digester/driver/Driver.java @@ -0,0 +1,28 @@ +package com.github.eulerlcs.jmr.challenge.xmlparser.digester.driver; + +import java.io.File; +import java.io.IOException; + +import org.apache.commons.digester.Digester; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.xml.sax.SAXException; + +import com.github.eulerlcs.jmr.challenge.xmlparser.digester.core.HelloDigester; +import com.github.eulerlcs.jmr.challenge.xmlparser.digester.entity.Hello; + +public class Driver { + private final static Logger log = LoggerFactory.getLogger(Driver.class); + + public static void main(String[] args) { + Digester d = HelloDigester.newInstance(); + + try { + File file = new File("data//xmlparser", "hello.xml"); + Hello helloEntity = (Hello) d.parse(file); + log.debug("hello.value=[{}]", helloEntity.getValue()); + } catch (IOException | SAXException e) { + e.printStackTrace(); + } + } +} diff --git a/group09/41689722.eulerlcs/2.code/jmr-11-challenge/src/main/java/com/github/eulerlcs/jmr/challenge/xmlparser/digester/entity/Hello.java b/group09/41689722.eulerlcs/2.code/jmr-11-challenge/src/main/java/com/github/eulerlcs/jmr/challenge/xmlparser/digester/entity/Hello.java new file mode 100644 index 0000000000..415dbef23a --- /dev/null +++ b/group09/41689722.eulerlcs/2.code/jmr-11-challenge/src/main/java/com/github/eulerlcs/jmr/challenge/xmlparser/digester/entity/Hello.java @@ -0,0 +1,19 @@ +package com.github.eulerlcs.jmr.challenge.xmlparser.digester.entity; + +import java.util.ArrayList; +import java.util.List; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class Hello { + private String project; + private String value; + private List files = new ArrayList<>(); + + public void addFile(HelloFile file) { + files.add(file); + } +} diff --git a/group09/41689722.eulerlcs/2.code/jmr-11-challenge/src/main/java/com/github/eulerlcs/jmr/challenge/xmlparser/digester/entity/HelloFile.java b/group09/41689722.eulerlcs/2.code/jmr-11-challenge/src/main/java/com/github/eulerlcs/jmr/challenge/xmlparser/digester/entity/HelloFile.java new file mode 100644 index 0000000000..2892a3058e --- /dev/null +++ b/group09/41689722.eulerlcs/2.code/jmr-11-challenge/src/main/java/com/github/eulerlcs/jmr/challenge/xmlparser/digester/entity/HelloFile.java @@ -0,0 +1,11 @@ +package com.github.eulerlcs.jmr.challenge.xmlparser.digester.entity; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class HelloFile { + private String path; + private String name; +} diff --git a/group09/41689722.eulerlcs/2.code/jmr-11-challenge/src/main/java/com/github/eulerlcs/jmr/challenge/xmlparser/package-info.java b/group09/41689722.eulerlcs/2.code/jmr-11-challenge/src/main/java/com/github/eulerlcs/jmr/challenge/xmlparser/package-info.java new file mode 100644 index 0000000000..4f7a71c4bc --- /dev/null +++ b/group09/41689722.eulerlcs/2.code/jmr-11-challenge/src/main/java/com/github/eulerlcs/jmr/challenge/xmlparser/package-info.java @@ -0,0 +1,13 @@ +/** + * 各种xml库 + *
    + *
  • apache digester + *
  • dom + *
  • dom4j + *
  • ldom + *
  • jaxb + *
  • sax + *
+ */ + +package com.github.eulerlcs.jmr.challenge.xmlparser; \ No newline at end of file diff --git a/group09/41689722.eulerlcs/20170226-eulerlcs-collection/collection-parent/src/site/.gitkeep b/group09/41689722.eulerlcs/2.code/jmr-11-challenge/src/main/resources/.gitkeep similarity index 100% rename from group09/41689722.eulerlcs/20170226-eulerlcs-collection/collection-parent/src/site/.gitkeep rename to group09/41689722.eulerlcs/2.code/jmr-11-challenge/src/main/resources/.gitkeep diff --git a/group09/41689722.eulerlcs/2.code/jmr-11-challenge/src/main/resources/log4j.xml b/group09/41689722.eulerlcs/2.code/jmr-11-challenge/src/main/resources/log4j.xml new file mode 100644 index 0000000000..831b8d9ce3 --- /dev/null +++ b/group09/41689722.eulerlcs/2.code/jmr-11-challenge/src/main/resources/log4j.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/group09/41689722.eulerlcs/2.code/jmr-11-challenge/src/test/java/.gitkeep b/group09/41689722.eulerlcs/2.code/jmr-11-challenge/src/test/java/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/group09/41689722.eulerlcs/2.code/jmr-11-challenge/src/test/java/com/github/eulerlcs/jmr/challenge/systemrules/AppWithExitTest.java b/group09/41689722.eulerlcs/2.code/jmr-11-challenge/src/test/java/com/github/eulerlcs/jmr/challenge/systemrules/AppWithExitTest.java new file mode 100644 index 0000000000..c849302200 --- /dev/null +++ b/group09/41689722.eulerlcs/2.code/jmr-11-challenge/src/test/java/com/github/eulerlcs/jmr/challenge/systemrules/AppWithExitTest.java @@ -0,0 +1,51 @@ +/* copy from http://stefanbirkner.github.io/system-rules/index.html */ + +package com.github.eulerlcs.jmr.challenge.systemrules; + +import static org.junit.Assert.assertEquals; + +import org.junit.Rule; +import org.junit.Test; +import org.junit.contrib.java.lang.system.Assertion; +import org.junit.contrib.java.lang.system.ExpectedSystemExit; + +public class AppWithExitTest { + @Rule + public final ExpectedSystemExit exit = ExpectedSystemExit.none(); + + @Test + public void exits() { + exit.expectSystemExit(); + AppWithExit.doSomethingAndExit(); + } + + @Test + public void exitsWithStatusCode1() { + exit.expectSystemExitWithStatus(1); + AppWithExit.doSomethingAndExit(); + } + + @Test + public void writesMessage() { + exit.expectSystemExitWithStatus(1); + exit.checkAssertionAfterwards(new Assertion() { + @Override + public void checkAssertion() { + assertEquals("exit ...", AppWithExit.message); + } + }); + AppWithExit.doSomethingAndExit(); + } + + @Test + public void systemExitWithStatusCode1() { + exit.expectSystemExitWithStatus(1); + AppWithExit.doSomethingAndExit(); + } + + @Test + public void noSystemExit() { + AppWithExit.doNothing(); + // passes + } +} \ No newline at end of file diff --git a/group09/41689722.eulerlcs/2.code/jmr-11-challenge/src/test/resources/.gitkeep b/group09/41689722.eulerlcs/2.code/jmr-11-challenge/src/test/resources/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/group09/41689722.eulerlcs/20170226-eulerlcs-collection/collection-lib/pom.xml b/group09/41689722.eulerlcs/2.code/jmr-61-170226-collection/pom.xml similarity index 71% rename from group09/41689722.eulerlcs/20170226-eulerlcs-collection/collection-lib/pom.xml rename to group09/41689722.eulerlcs/2.code/jmr-61-170226-collection/pom.xml index 6d1654e23a..90b5cc3818 100644 --- a/group09/41689722.eulerlcs/20170226-eulerlcs-collection/collection-lib/pom.xml +++ b/group09/41689722.eulerlcs/2.code/jmr-61-170226-collection/pom.xml @@ -2,13 +2,13 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - com.eulerlcs.collection - collection-parent + com.github.eulerlcs + jmr-02-parent 0.0.1-SNAPSHOT - ../collection-parent/pom.xml + ../jmr-02-parent/pom.xml - collection-lib - + jmr-61-170226-collection + eulerlcs master java road collection diff --git a/group09/41689722.eulerlcs/20170226-eulerlcs-collection/collection-lib/src/main/java/com/eulerlcs/collection/ArrayList.java b/group09/41689722.eulerlcs/2.code/jmr-61-170226-collection/src/main/java/com/github/eulerlcs/jmr/collection/core/ArrayList.java similarity index 97% rename from group09/41689722.eulerlcs/20170226-eulerlcs-collection/collection-lib/src/main/java/com/eulerlcs/collection/ArrayList.java rename to group09/41689722.eulerlcs/2.code/jmr-61-170226-collection/src/main/java/com/github/eulerlcs/jmr/collection/core/ArrayList.java index 219919719b..1c039b8c62 100644 --- a/group09/41689722.eulerlcs/20170226-eulerlcs-collection/collection-lib/src/main/java/com/eulerlcs/collection/ArrayList.java +++ b/group09/41689722.eulerlcs/2.code/jmr-61-170226-collection/src/main/java/com/github/eulerlcs/jmr/collection/core/ArrayList.java @@ -1,7 +1,7 @@ /** * 90% or more copy from jdk */ -package com.eulerlcs.collection; +package com.github.eulerlcs.jmr.collection.core; import java.util.Arrays; import java.util.Collection; @@ -15,7 +15,7 @@ import java.util.function.Consumer; public class ArrayList implements List, RandomAccess { - private static final int MAXQARRAYQSIZE = 1 << 10; + private static final int MAX_ARRAY_SIZE = 1 << 10; private transient Object[] elementData = new Object[0]; private int size; private transient int modCount = 0; @@ -267,15 +267,15 @@ private void ensureExplicitCapacity(int minCapacity) { if (elementData.length > minCapacity) { return; - } else if (minCapacity > MAXQARRAYQSIZE) { + } else if (minCapacity > MAX_ARRAY_SIZE) { throw new OutOfMemoryError(); } int oldCapacity = elementData.length; int newCapacity = oldCapacity == 0 ? 10 : (oldCapacity + (oldCapacity >> 1)); - if (newCapacity > MAXQARRAYQSIZE) { - newCapacity = MAXQARRAYQSIZE; + if (newCapacity > MAX_ARRAY_SIZE) { + newCapacity = MAX_ARRAY_SIZE; } elementData = Arrays.copyOf(elementData, newCapacity); diff --git a/group09/41689722.eulerlcs/2.code/jmr-61-170226-collection/src/main/resources/.gitkeep b/group09/41689722.eulerlcs/2.code/jmr-61-170226-collection/src/main/resources/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/group09/41689722.eulerlcs/2.code/jmr-61-170226-collection/src/main/resources/log4j.xml b/group09/41689722.eulerlcs/2.code/jmr-61-170226-collection/src/main/resources/log4j.xml new file mode 100644 index 0000000000..831b8d9ce3 --- /dev/null +++ b/group09/41689722.eulerlcs/2.code/jmr-61-170226-collection/src/main/resources/log4j.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/group09/41689722.eulerlcs/20170226-eulerlcs-collection/collection-lib/src/test/java/com/eulerlcs/collection/TestArrayList.java b/group09/41689722.eulerlcs/2.code/jmr-61-170226-collection/src/test/java/com/github/eulerlcs/jmr/collection/core/TestArrayList.java similarity index 86% rename from group09/41689722.eulerlcs/20170226-eulerlcs-collection/collection-lib/src/test/java/com/eulerlcs/collection/TestArrayList.java rename to group09/41689722.eulerlcs/2.code/jmr-61-170226-collection/src/test/java/com/github/eulerlcs/jmr/collection/core/TestArrayList.java index b66dd278e3..96e1049d73 100644 --- a/group09/41689722.eulerlcs/20170226-eulerlcs-collection/collection-lib/src/test/java/com/eulerlcs/collection/TestArrayList.java +++ b/group09/41689722.eulerlcs/2.code/jmr-61-170226-collection/src/test/java/com/github/eulerlcs/jmr/collection/core/TestArrayList.java @@ -1,4 +1,4 @@ -package com.eulerlcs.collection; +package com.github.eulerlcs.jmr.collection.core; import java.util.List; @@ -9,6 +9,8 @@ import org.junit.BeforeClass; import org.junit.Test; +import com.github.eulerlcs.jmr.collection.core.ArrayList; + public class TestArrayList { @BeforeClass diff --git a/group09/41689722.eulerlcs/2.code/jmr-61-170226-collection/src/test/resources/.gitkeep b/group09/41689722.eulerlcs/2.code/jmr-61-170226-collection/src/test/resources/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/group09/41689722.eulerlcs/2.code/jmr-61-170305-litestruts/data/.gitkeep b/group09/41689722.eulerlcs/2.code/jmr-61-170305-litestruts/data/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/group09/41689722.eulerlcs/2.code/jmr-61-170305-litestruts/pom.xml b/group09/41689722.eulerlcs/2.code/jmr-61-170305-litestruts/pom.xml new file mode 100644 index 0000000000..6ce14ac574 --- /dev/null +++ b/group09/41689722.eulerlcs/2.code/jmr-61-170305-litestruts/pom.xml @@ -0,0 +1,39 @@ + + 4.0.0 + + com.github.eulerlcs + jmr-02-parent + 0.0.1-SNAPSHOT + ../jmr-02-parent/pom.xml + + jmr-61-170305-litestruts + eulerlcs master java road lite struts + + + + commons-digester + commons-digester + + + org.projectlombok + lombok + + + org.slf4j + slf4j-api + + + org.slf4j + slf4j-log4j12 + + + junit + junit + + + com.github.stefanbirkner + system-rules + + + \ No newline at end of file diff --git a/group09/41689722.eulerlcs/2.code/jmr-61-170305-litestruts/src/main/java/.gitkeep b/group09/41689722.eulerlcs/2.code/jmr-61-170305-litestruts/src/main/java/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/group09/41689722.eulerlcs/2.code/jmr-61-170305-litestruts/src/main/java/com/github/eulerlcs/jmr/litestruts/util/ArrayUtil.java b/group09/41689722.eulerlcs/2.code/jmr-61-170305-litestruts/src/main/java/com/github/eulerlcs/jmr/litestruts/util/ArrayUtil.java new file mode 100644 index 0000000000..636d0b1789 --- /dev/null +++ b/group09/41689722.eulerlcs/2.code/jmr-61-170305-litestruts/src/main/java/com/github/eulerlcs/jmr/litestruts/util/ArrayUtil.java @@ -0,0 +1,279 @@ +/** + * 问题点: 没写注释,代码比较难读。尤其 merge方法。 + */ +package com.github.eulerlcs.jmr.litestruts.util; + +import java.util.Arrays; + +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 static void reverseArray(int[] origin) { + if (origin == null || origin.length < 2) { + return; + } + + for (int head = 0, tail = origin.length - 1; head < tail; head++, tail--) { + origin[head] = origin[head] ^ origin[tail]; + origin[tail] = origin[head] ^ origin[tail]; + origin[head] = origin[head] ^ origin[tail]; + } + } + + /** + * 现在有如下的一个数组: 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 static int[] removeZero(int[] oldArray) { + if (oldArray == null) { + return new int[0]; + } + + int count = 0; + for (int i = 0; i < oldArray.length; i++) { + if (oldArray[i] != 0) + count++; + } + + int[] newArray = new int[count]; + int newIndex = 0; + for (int i = 0; i < oldArray.length; i++) { + if (oldArray[i] != 0) { + newArray[newIndex] = oldArray[i]; + newIndex++; + } + } + + return newArray; + } + + /** + * 给定两个已经排序好的整形数组, 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 static int[] merge(int[] array1, int[] array2) { + if (array1 == null || array1.length == 0) { + if (array2 == null || array2.length == 0) { + return new int[0]; + } else { + return Arrays.copyOf(array2, array2.length); + } + } else if (array2 == null || array2.length == 0) { + return Arrays.copyOf(array1, array1.length); + } + + int[] result = new int[array1.length + array2.length]; + int idxResult = 0; + int idx1 = 0; + int idx2 = 0; + + for (; idx1 < array1.length; idx1++) { + if (array1[idx1] < array2[idx2]) { + result[idxResult] = array1[idx1]; + idxResult++; + } else if (array1[idx1] == array2[idx2]) { + result[idxResult] = array1[idx1]; + idxResult++; + idx2++; + } else { + for (; idx2 < array2.length; idx2++) { + if (array2[idx2] < array1[idx1]) { + result[idxResult] = array2[idx2]; + idxResult++; + } else { + if (array2[idx2] == array1[idx1]) { + idx2++; + } + + break; + } + } + + if (idx2 == array2.length) { + break; + } else { + idx1--; + } + } + } + + if (idx1 < array1.length) { + System.arraycopy(array1, idx1, result, idxResult, array1.length - idx1); + idxResult += array1.length - idx1; + } + + if (idx2 < array2.length) { + System.arraycopy(array2, idx2, result, idxResult, array2.length - idx2); + idxResult += array2.length - idx2; + } + + result = removeZero(result); + return result; + } + + /** + * 把一个已经存满数据的数组 oldArray的容量进行扩展, 扩展后的新数据大小为oldArray.length + size + * 注意,老数组的元素在新数组中需要保持 例如 oldArray = [2,3,6] , size = 3,则返回的新数组为 + * [2,3,6,0,0,0] + * + * @param oldArray + * @param increaseCapacity + * @return + */ + public static int[] grow(int[] oldArray, int increaseCapacity) { + if (oldArray == null || increaseCapacity < 0) { + return new int[0]; + } + + int newCapacity = oldArray.length + increaseCapacity; + + int[] newArray = Arrays.copyOf(oldArray, newCapacity); + + return newArray; + } + + /** + * 斐波那契数列为:1,1,2,3,5,8,13,21...... ,给定一个最大值, 返回小于该值的数列 例如, max = 15 , + * 则返回的数组应该为 [1,1,2,3,5,8,13] max = 1, 则返回空数组 [] + * + * @param max + * @return + */ + public static int[] fibonacci(int max) { + if (max <= 1) { + return new int[0]; + } + + int[] result = new int[10]; + result[0] = 1; + result[1] = 1; + int idx = 2; + int sum = 2; + while (sum < max) { + if (idx >= result.length) { + grow(result, result.length * 2); + } + + result[idx] = sum; + sum = result[idx - 1] + result[idx]; + idx++; + } + + result = removeZero(result); + return result; + } + + /** + * 返回小于给定最大值max的所有素数数组 例如max = 23, 返回的数组为[2,3,5,7,11,13,17,19] + * + * @param max + * @return + */ + public static int[] getPrimes(int max) { + if (max < 2) { + return new int[0]; + } + + int[] all = new int[max]; + int index = 0; + int temp = 0; + + for (int i = 0; i < max; i++) { + all[i] = i; + } + + all[0] = 0; + all[1] = 0; + index = 2; + + // 筛法 + loops: for (; index < max;) { + for (int i = 2;; i++) { + temp = index * i; + if (temp >= max) { + break; + } + all[temp] = 0; + } + + for (int i = index + 1; i < max; i++) { + if (all[i] != 0) { + index = i; + continue loops; + } + } + + break; + } + + int[] result = removeZero(all); + return result; + } + + /** + * 所谓“完数”, 是指这个数恰好等于它的因子之和,例如6=1+2+3 给定一个最大值max, 返回一个数组, 数组中是小于max 的所有完数 + * + * @param max + * @return + */ + public static long[] getPerfectNumbers(long max) { + long[] perfect = new long[49];// 到2016年1月为止,共发现了49个完全数 + int idx = 0; + long sum = 1; + long sqrt = 0; + + for (long n = 2; n < max; n++) { + sum = 1; + sqrt = (long) Math.sqrt(n); + for (long i = 2; i <= sqrt; i++) { + if (n % i == 0) + sum += i + n / i; + } + + if (sum == n) { + perfect[idx] = n; + idx++; + } + } + + // return removeZero(perfect); + return perfect; + } + + /** + * 用separator 把数组 array给连接起来 例如array= [3,8,9], separator = "-" 则返回值为"3-8-9" + * + * @param array + * @param separator + * @return + */ + public static String join(int[] array, String separator) { + if (array == null || array.length == 0) { + return ""; + } + + StringBuilder sb = new StringBuilder(); + + for (int i = 0; i < array.length - 1; i++) { + sb.append(array[i] + separator); + } + sb.append(String.valueOf(array[array.length - 1])); + + return sb.toString(); + } +} diff --git a/group09/41689722.eulerlcs/2.code/jmr-61-170305-litestruts/src/main/java/com/github/eulerlcs/jmr/litestruts/util/package-info.java b/group09/41689722.eulerlcs/2.code/jmr-61-170305-litestruts/src/main/java/com/github/eulerlcs/jmr/litestruts/util/package-info.java new file mode 100644 index 0000000000..6797c45b67 --- /dev/null +++ b/group09/41689722.eulerlcs/2.code/jmr-61-170305-litestruts/src/main/java/com/github/eulerlcs/jmr/litestruts/util/package-info.java @@ -0,0 +1,4 @@ +/** + * + */ +package com.github.eulerlcs.jmr.litestruts.util; \ No newline at end of file diff --git a/group09/41689722.eulerlcs/2.code/jmr-61-170305-litestruts/src/main/resources/log4j.xml b/group09/41689722.eulerlcs/2.code/jmr-61-170305-litestruts/src/main/resources/log4j.xml new file mode 100644 index 0000000000..831b8d9ce3 --- /dev/null +++ b/group09/41689722.eulerlcs/2.code/jmr-61-170305-litestruts/src/main/resources/log4j.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/group09/41689722.eulerlcs/2.code/jmr-61-170305-litestruts/src/test/java/.gitkeep b/group09/41689722.eulerlcs/2.code/jmr-61-170305-litestruts/src/test/java/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/group09/41689722.eulerlcs/2.code/jmr-61-170305-litestruts/src/test/java/com/github/eulerlcs/jmr/litestruts/util/ArrayUtilTest.java b/group09/41689722.eulerlcs/2.code/jmr-61-170305-litestruts/src/test/java/com/github/eulerlcs/jmr/litestruts/util/ArrayUtilTest.java new file mode 100644 index 0000000000..b2957d01b7 --- /dev/null +++ b/group09/41689722.eulerlcs/2.code/jmr-61-170305-litestruts/src/test/java/com/github/eulerlcs/jmr/litestruts/util/ArrayUtilTest.java @@ -0,0 +1,266 @@ +/** + * 问题点: 没有全分支覆盖。只简单的测了关键或者关心的case + */ +package com.github.eulerlcs.jmr.litestruts.util; + +import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertEquals; + +import org.junit.Test; + +public class ArrayUtilTest { + + @Test + public void reverseArray_null() { + int[] actuals = null; + int[] expecteds = null; + + ArrayUtil.reverseArray(actuals); + + assertArrayEquals(actuals, expecteds); + } + + @Test + public void reverseArray_0() { + int[] actuals = {}; + int[] expecteds = {}; + + ArrayUtil.reverseArray(actuals); + + assertArrayEquals(actuals, expecteds); + } + + @Test + public void reverseArray_1() { + int[] actuals = { 2 }; + int[] expecteds = { 2 }; + + ArrayUtil.reverseArray(actuals); + + assertArrayEquals(actuals, expecteds); + } + + @Test + public void reverseArray_2() { + int[] actuals = { 7, 9 }; + int[] expecteds = { 9, 7 }; + + ArrayUtil.reverseArray(actuals); + + assertArrayEquals(actuals, expecteds); + } + + @Test + public void reverseArray_4() { + int[] actuals = { 7, 9, 30, 3 }; + int[] expecteds = { 3, 30, 9, 7 }; + + ArrayUtil.reverseArray(actuals); + + assertArrayEquals(actuals, expecteds); + } + + @Test + public void reverseArray_5() { + int[] actuals = { 7, 9, 30, 3, 4 }; + int[] expecteds = { 4, 3, 30, 9, 7 }; + + ArrayUtil.reverseArray(actuals); + + assertArrayEquals(actuals, expecteds); + } + + @Test + public void removeZero_null() { + int oldArr[] = null; + int[] expecteds = {}; + + int[] newArr = ArrayUtil.removeZero(oldArr); + + assertArrayEquals(newArr, expecteds); + } + + @Test + public void removeZero_0() { + int oldArr[] = {}; + int[] expecteds = {}; + + int[] newArr = ArrayUtil.removeZero(oldArr); + + assertArrayEquals(newArr, expecteds); + } + + @Test + public void removeZero_1() { + int oldArr[] = { 0 }; + int[] expecteds = {}; + + int[] newArr = ArrayUtil.removeZero(oldArr); + + assertArrayEquals(newArr, expecteds); + } + + @Test + public void removeZero_2() { + int oldArr[] = { 3, 5 }; + int[] expecteds = { 3, 5 }; + + int[] newArr = ArrayUtil.removeZero(oldArr); + + assertArrayEquals(newArr, expecteds); + } + + @Test + public void removeZero_3() { + int oldArr[] = { 1, 3, 4, 5, 0, 0, 6, 6, 0, 5, 4, 7, 6, 7, 0, 5 }; + int[] expecteds = { 1, 3, 4, 5, 6, 6, 5, 4, 7, 6, 7, 5 }; + + int[] newArr = ArrayUtil.removeZero(oldArr); + + assertArrayEquals(newArr, expecteds); + } + + @Test + public void merge_1() { + int[] a1 = { 3, 5, 7, 8 }; + int[] a2 = { 4, 5, 6, 7 }; + int[] expecteds = { 3, 4, 5, 6, 7, 8 }; + + int[] newArr = ArrayUtil.merge(a1, a2); + + assertArrayEquals(newArr, expecteds); + } + + @Test + public void merge_2() { + int[] a1 = { 4, 5, 6, 7 }; + int[] a2 = { 3, 5, 7, 8 }; + int[] expecteds = { 3, 4, 5, 6, 7, 8 }; + + int[] newArr = ArrayUtil.merge(a1, a2); + + assertArrayEquals(newArr, expecteds); + } + + @Test + public void grow_1() { + int[] oldArray = { 2, 3, 6 }; + int increaseCapacity = 3; + int[] expecteds = { 2, 3, 6, 0, 0, 0 }; + + int[] newArr = ArrayUtil.grow(oldArray, increaseCapacity); + + assertArrayEquals(newArr, expecteds); + } + + @Test + public void fibonacci_1() { + int max = 1; + int[] expecteds = {}; + + int[] newArr = ArrayUtil.fibonacci(max); + + assertArrayEquals(newArr, expecteds); + } + + @Test + public void fibonacci_2() { + int max = 2; + int[] expecteds = { 1, 1 }; + + int[] newArr = ArrayUtil.fibonacci(max); + + assertArrayEquals(newArr, expecteds); + } + + @Test + public void fibonacci_15() { + int max = 15; + int[] expecteds = { 1, 1, 2, 3, 5, 8, 13 }; + + int[] newArr = ArrayUtil.fibonacci(max); + + assertArrayEquals(newArr, expecteds); + } + + @Test + public void getPrimes_1() { + int max = 1; + int[] expecteds = {}; + + int[] newArr = ArrayUtil.getPrimes(max); + + assertArrayEquals(newArr, expecteds); + } + + @Test + public void getPrimes_2() { + int max = 2; + int[] expecteds = {}; + + int[] newArr = ArrayUtil.getPrimes(max); + + assertArrayEquals(newArr, expecteds); + } + + @Test + public void getPrimes_3() { + int max = 3; + int[] expecteds = { 2 }; + + int[] newArr = ArrayUtil.getPrimes(max); + + assertArrayEquals(newArr, expecteds); + } + + @Test + public void getPrimes_4() { + int max = 4; + int[] expecteds = { 2, 3 }; + + int[] newArr = ArrayUtil.getPrimes(max); + + assertArrayEquals(newArr, expecteds); + } + + @Test + public void getPrimes_23() { + int max = 23; + int[] expecteds = { 2, 3, 5, 7, 11, 13, 17, 19 }; + + int[] newArr = ArrayUtil.getPrimes(max); + + assertArrayEquals(newArr, expecteds); + } + + @Test + public void getPrimes_24() { + int max = 24; + int[] expecteds = { 2, 3, 5, 7, 11, 13, 17, 19, 23 }; + + int[] newArr = ArrayUtil.getPrimes(max); + + assertArrayEquals(newArr, expecteds); + } + + @Test + public void getPerfectNumbers_max() { + long max = Long.MAX_VALUE; + max = 100000; + long[] expecteds = { 6, 28, 496, 8128, 33550336, 8589869056L, 137438691328L, 2305843008139952128L }; + + long[] newArr = ArrayUtil.getPerfectNumbers(max); + + assertEquals(newArr[3], expecteds[3]); + } + + @Test + public void join_0() { + int[] array = { 3, 8, 9 }; + String separator = "-"; + String expected = "3-8-9"; + + String actual = ArrayUtil.join(array, separator); + assertEquals(expected, actual); + } +} diff --git a/group09/41689722.eulerlcs/2.code/jmr-61-170305-litestruts/src/test/resources/.gitkeep b/group09/41689722.eulerlcs/2.code/jmr-61-170305-litestruts/src/test/resources/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/group09/41689722.eulerlcs/20170226-eulerlcs-collection/.gitignore b/group09/41689722.eulerlcs/20170226-eulerlcs-collection/.gitignore deleted file mode 100644 index e10e727be5..0000000000 --- a/group09/41689722.eulerlcs/20170226-eulerlcs-collection/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/.metadata/ diff --git a/group09/41689722.eulerlcs/20170226-eulerlcs-collection/collection-aggregator/.project b/group09/41689722.eulerlcs/20170226-eulerlcs-collection/collection-aggregator/.project deleted file mode 100644 index 47cffea382..0000000000 --- a/group09/41689722.eulerlcs/20170226-eulerlcs-collection/collection-aggregator/.project +++ /dev/null @@ -1,17 +0,0 @@ - - - collection-aggregator - - - - - - org.eclipse.m2e.core.maven2Builder - - - - - - org.eclipse.m2e.core.maven2Nature - - diff --git a/group09/41689722.eulerlcs/20170226-eulerlcs-collection/collection-aggregator/.settings/org.eclipse.m2e.core.prefs b/group09/41689722.eulerlcs/20170226-eulerlcs-collection/collection-aggregator/.settings/org.eclipse.m2e.core.prefs deleted file mode 100644 index f897a7f1cb..0000000000 --- a/group09/41689722.eulerlcs/20170226-eulerlcs-collection/collection-aggregator/.settings/org.eclipse.m2e.core.prefs +++ /dev/null @@ -1,4 +0,0 @@ -activeProfiles= -eclipse.preferences.version=1 -resolveWorkspaceProjects=true -version=1 diff --git a/group09/41689722.eulerlcs/20170226-eulerlcs-collection/collection-lib/.classpath b/group09/41689722.eulerlcs/20170226-eulerlcs-collection/collection-lib/.classpath deleted file mode 100644 index 5131f04311..0000000000 --- a/group09/41689722.eulerlcs/20170226-eulerlcs-collection/collection-lib/.classpath +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/group09/41689722.eulerlcs/20170226-eulerlcs-collection/collection-lib/.gitignore b/group09/41689722.eulerlcs/20170226-eulerlcs-collection/collection-lib/.gitignore deleted file mode 100644 index b83d22266a..0000000000 --- a/group09/41689722.eulerlcs/20170226-eulerlcs-collection/collection-lib/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/target/ diff --git a/group09/41689722.eulerlcs/20170226-eulerlcs-collection/collection-lib/.project b/group09/41689722.eulerlcs/20170226-eulerlcs-collection/collection-lib/.project deleted file mode 100644 index 69766f62bc..0000000000 --- a/group09/41689722.eulerlcs/20170226-eulerlcs-collection/collection-lib/.project +++ /dev/null @@ -1,23 +0,0 @@ - - - collection-lib - - - - - - org.eclipse.jdt.core.javabuilder - - - - - org.eclipse.m2e.core.maven2Builder - - - - - - org.eclipse.jdt.core.javanature - org.eclipse.m2e.core.maven2Nature - - diff --git a/group09/41689722.eulerlcs/20170226-eulerlcs-collection/collection-lib/.settings/org.eclipse.jdt.core.prefs b/group09/41689722.eulerlcs/20170226-eulerlcs-collection/collection-lib/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index 714351aec1..0000000000 --- a/group09/41689722.eulerlcs/20170226-eulerlcs-collection/collection-lib/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,5 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.compliance=1.8 -org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning -org.eclipse.jdt.core.compiler.source=1.8 diff --git a/group09/41689722.eulerlcs/20170226-eulerlcs-collection/collection-lib/.settings/org.eclipse.m2e.core.prefs b/group09/41689722.eulerlcs/20170226-eulerlcs-collection/collection-lib/.settings/org.eclipse.m2e.core.prefs deleted file mode 100644 index f897a7f1cb..0000000000 --- a/group09/41689722.eulerlcs/20170226-eulerlcs-collection/collection-lib/.settings/org.eclipse.m2e.core.prefs +++ /dev/null @@ -1,4 +0,0 @@ -activeProfiles= -eclipse.preferences.version=1 -resolveWorkspaceProjects=true -version=1 diff --git a/group09/41689722.eulerlcs/20170226-eulerlcs-collection/collection-parent/.project b/group09/41689722.eulerlcs/20170226-eulerlcs-collection/collection-parent/.project deleted file mode 100644 index 3467a254de..0000000000 --- a/group09/41689722.eulerlcs/20170226-eulerlcs-collection/collection-parent/.project +++ /dev/null @@ -1,17 +0,0 @@ - - - collection-parent - - - - - - org.eclipse.m2e.core.maven2Builder - - - - - - org.eclipse.m2e.core.maven2Nature - - diff --git a/group09/41689722.eulerlcs/20170226-eulerlcs-collection/collection-parent/.settings/org.eclipse.m2e.core.prefs b/group09/41689722.eulerlcs/20170226-eulerlcs-collection/collection-parent/.settings/org.eclipse.m2e.core.prefs deleted file mode 100644 index f897a7f1cb..0000000000 --- a/group09/41689722.eulerlcs/20170226-eulerlcs-collection/collection-parent/.settings/org.eclipse.m2e.core.prefs +++ /dev/null @@ -1,4 +0,0 @@ -activeProfiles= -eclipse.preferences.version=1 -resolveWorkspaceProjects=true -version=1