Skip to content

Commit 7b330a9

Browse files
committed
first commit
0 parents  commit 7b330a9

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

55 files changed

+676
-0
lines changed

GuessNumber-master/.classpath

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<classpath>
3+
<classpathentry kind="src" path="src"/>
4+
<classpathentry kind="src" path="test"/>
5+
<classpathentry kind="lib" path="lib/common-lang3.jar"/>
6+
<classpathentry kind="lib" path="lib/hamcrest-core-1.3.jar"/>
7+
<classpathentry kind="lib" path="lib/junit-4.12.jar"/>
8+
<classpathentry kind="lib" path="lib/mockito-all-1.9.5.jar"/>
9+
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
10+
<classpathentry kind="output" path="bin"/>
11+
</classpath>

GuessNumber-master/.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# Created by .ignore support plugin (hsz.mobi)
2+
.idea
3+
out

GuessNumber-master/.project

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<projectDescription>
3+
<name>GuessNumber-master</name>
4+
<comment></comment>
5+
<projects>
6+
</projects>
7+
<buildSpec>
8+
<buildCommand>
9+
<name>org.eclipse.jdt.core.javabuilder</name>
10+
<arguments>
11+
</arguments>
12+
</buildCommand>
13+
</buildSpec>
14+
<natures>
15+
<nature>org.eclipse.jdt.core.javanature</nature>
16+
</natures>
17+
</projectDescription>

GuessNumber-master/GuessNumber.iml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<module type="JAVA_MODULE" version="4">
3+
<component name="NewModuleRootManager" inherit-compiler-output="true">
4+
<exclude-output />
5+
<content url="file://$MODULE_DIR$">
6+
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
7+
<sourceFolder url="file://$MODULE_DIR$/test" isTestSource="true" />
8+
</content>
9+
<orderEntry type="inheritedJdk" />
10+
<orderEntry type="sourceFolder" forTests="false" />
11+
<orderEntry type="library" name="lib" level="project" />
12+
</component>
13+
</module>

GuessNumber-master/README.md

Lines changed: 19 additions & 0 deletions

GuessNumber-master/bin/Main.class

701 Bytes
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
632 KB
Binary file not shown.
44 KB
Binary file not shown.

GuessNumber-master/lib/junit-4.12.jar

308 KB
Binary file not shown.
1.51 MB
Binary file not shown.

GuessNumber-master/src/Main.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import com.tw.practice.Game;
2+
import com.tw.practice.NumberGenerator;
3+
import com.tw.practice.NumberReader;
4+
import com.tw.practice.Printer;
5+
6+
public class Main {
7+
public static void main(String[] args) {
8+
Game game = new Game(new NumberGenerator(), new Printer(), new NumberReader());
9+
game.start();
10+
}
11+
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package com.tw.practice;
2+
3+
public class Game {
4+
private static final String WIN_CODE = "4A0B";
5+
private Printer printer;
6+
private Number generatedNumber;
7+
private NumberReader reader;
8+
9+
private int remainingGuessCount = 6;
10+
11+
public Game(NumberGenerator numberGenerator, Printer printer, NumberReader reader) {
12+
this.printer = printer;
13+
this.reader = reader;
14+
this.generatedNumber = new Number(numberGenerator.generate());
15+
}
16+
17+
public void start() {
18+
printer.print("please input a 4 digit number:");
19+
20+
while (remainingGuessCount > 0) {
21+
try {
22+
String result = generatedNumber.compare(reader.read());
23+
if (WIN_CODE.equals(result)) {
24+
printer.print("you win");
25+
return;
26+
}
27+
28+
printer.print(result);
29+
this.remainingGuessCount--;
30+
} catch (Exception e) {
31+
printer.print(e.getMessage());
32+
}
33+
}
34+
35+
printer.print("Game Over");
36+
}
37+
38+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.tw.practice;
2+
3+
public class Number {
4+
private static final int NUMBER_LENGTH = 4;
5+
private String value;
6+
7+
public Number(String value) {
8+
this.value = value;
9+
}
10+
11+
public String compare(String stringToCompare) {
12+
int a = 0, b = 0;
13+
for (int i = 0; i < NUMBER_LENGTH; i++) {
14+
if (value.charAt(i) == stringToCompare.charAt(i)) {
15+
a++;
16+
} else if (value.contains(stringToCompare.substring(i, i + 1))) {
17+
b++;
18+
}
19+
}
20+
return a + "A" + b + "B";
21+
}
22+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package com.tw.practice;
2+
3+
import java.util.Arrays;
4+
import java.util.Collections;
5+
import java.util.List;
6+
7+
public class NumberGenerator {
8+
public String generate() {
9+
List<String> list = Arrays.asList("0", "1", "2", "3", "4", "5", "6", "7", "8", "9");
10+
Collections.shuffle(list);
11+
return String.join("", list.subList(0, 4));
12+
}
13+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package com.tw.practice;
2+
3+
import org.apache.commons.lang3.StringUtils;
4+
5+
import java.util.Scanner;
6+
7+
public class NumberReader {
8+
private Scanner scanner = new Scanner(System.in);
9+
10+
public String read() throws Exception {
11+
String inputNumber = scanner.next();
12+
if (StringUtils.isNumeric(inputNumber) && inputNumber.length() == 4) {
13+
return inputNumber;
14+
}
15+
throw new Exception("Invalid Input");
16+
}
17+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.tw.practice;
2+
3+
public class Printer {
4+
public void print(String message) {
5+
System.out.println(message);
6+
}
7+
}
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
package com.tw.practice;
2+
3+
import org.junit.Test;
4+
import org.junit.runner.RunWith;
5+
import org.mockito.Mock;
6+
import org.mockito.Mockito;
7+
import org.mockito.runners.MockitoJUnitRunner;
8+
9+
@RunWith(MockitoJUnitRunner.class)
10+
public class GameTest {
11+
12+
@Mock
13+
private NumberGenerator mockedGenerator;
14+
15+
@Mock
16+
private Printer mockedPrinter;
17+
18+
@Mock
19+
private NumberReader mockedReader;
20+
21+
@Test
22+
public void shouldReturn4A0BWhenInputSameNumber() throws Exception {
23+
Mockito.when(mockedGenerator.generate()).thenReturn("1234");
24+
Mockito.when(mockedReader.read()).thenReturn("1234");
25+
26+
Game game = new Game(mockedGenerator, mockedPrinter, mockedReader);
27+
28+
game.start();
29+
Mockito.verify(mockedPrinter, Mockito.times(1)).print("please input a 4 digit number:");
30+
Mockito.verify(mockedPrinter, Mockito.times(1)).print("you win");
31+
}
32+
33+
@Test
34+
public void shouldReturn0A4BWhenInputDifferentNumber() throws Exception {
35+
Mockito.when(mockedGenerator.generate()).thenReturn("4321");
36+
Mockito.when(mockedReader.read()).thenReturn("1234");
37+
38+
Game game = new Game(mockedGenerator, mockedPrinter, mockedReader);
39+
40+
game.start();
41+
Mockito.verify(mockedPrinter, Mockito.times(1)).print("please input a 4 digit number:");
42+
Mockito.verify(mockedPrinter, Mockito.times(6)).print("0A4B");
43+
Mockito.verify(mockedPrinter, Mockito.times(1)).print("Game Over");
44+
}
45+
46+
47+
@Test
48+
public void shouldReturn1A3BWhenInputDifferentNumber() throws Exception {
49+
Mockito.when(mockedGenerator.generate()).thenReturn("1342");
50+
Mockito.when(mockedReader.read()).thenReturn("1234");
51+
52+
Game game = new Game(mockedGenerator, mockedPrinter, mockedReader);
53+
54+
game.start();
55+
Mockito.verify(mockedPrinter, Mockito.times(1)).print("please input a 4 digit number:");
56+
Mockito.verify(mockedPrinter, Mockito.times(6)).print("1A3B");
57+
Mockito.verify(mockedPrinter, Mockito.times(1)).print("Game Over");
58+
}
59+
60+
@Test
61+
public void shouldReturn0A0BWhenInputDifferentNumber() throws Exception {
62+
Mockito.when(mockedGenerator.generate()).thenReturn("5678");
63+
Mockito.when(mockedReader.read()).thenReturn("1234");
64+
65+
Game game = new Game(mockedGenerator, mockedPrinter, mockedReader);
66+
67+
game.start();
68+
Mockito.verify(mockedPrinter, Mockito.times(1)).print("please input a 4 digit number:");
69+
Mockito.verify(mockedPrinter, Mockito.times(6)).print("0A0B");
70+
Mockito.verify(mockedPrinter, Mockito.times(1)).print("Game Over");
71+
}
72+
73+
74+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package com.tw.practice;
2+
3+
import org.apache.commons.lang3.StringUtils;
4+
import org.junit.Test;
5+
6+
import static org.junit.Assert.*;
7+
8+
public class NumberGeneratorTest {
9+
10+
private NumberGenerator generator = new NumberGenerator();
11+
12+
@Test
13+
public void shouldGenerateStringOfLengthFour() {
14+
String generatedNumber = generator.generate();
15+
assertEquals(4, generatedNumber.length());
16+
}
17+
18+
@Test
19+
public void shouldGenerate4Digits() {
20+
String generatedNumber = generator.generate();
21+
assertTrue(StringUtils.isNumeric(generatedNumber));
22+
}
23+
24+
@Test
25+
public void shouldGenerateNotRepeat() {
26+
String generatedNumber = generator.generate();
27+
for (int i = 0; i < 4; i++) {
28+
assertFalse(generatedNumber.substring(i + 1, 4).contains(generatedNumber.substring(i, i + 1)));
29+
}
30+
}
31+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package com.tw.practice;
2+
3+
import org.junit.Test;
4+
5+
import java.io.ByteArrayInputStream;
6+
import java.lang.reflect.Field;
7+
import java.util.Scanner;
8+
9+
import static org.junit.Assert.assertEquals;
10+
11+
public class NumberReaderTest {
12+
private NumberReader reader = new NumberReader();
13+
14+
private void setInputStream(String input) throws NoSuchFieldException, IllegalAccessException {
15+
Field scannerField = reader.getClass().getDeclaredField("scanner");
16+
scannerField.setAccessible(true);
17+
Scanner scannerWithMockedStream = new Scanner(new ByteArrayInputStream(input.getBytes()));
18+
scannerField.set(reader, scannerWithMockedStream);
19+
}
20+
21+
@Test
22+
public void shouldReadNumber() throws Exception {
23+
setInputStream("1234");
24+
assertEquals("1234", reader.read());
25+
}
26+
27+
@Test(expected = Exception.class)
28+
public void shouldThrowExceptionForNonNumberInput() throws Exception {
29+
setInputStream("123d");
30+
reader.read();
31+
}
32+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package com.tw.practice;
2+
3+
import static org.junit.Assert.*;
4+
5+
import org.junit.Test;
6+
7+
public class NumberTest {
8+
9+
@Test
10+
public void shouldreturn4A0BWhenInputDifferentNumber(){
11+
Number number = new Number("1234");
12+
assertEquals("4A0B",number.compare("1234"));
13+
}
14+
15+
@Test
16+
public void shouldreturn0A4BWhenInputDifferentNumber(){
17+
Number number = new Number("1234");
18+
assertEquals("0A4B",number.compare("4321"));
19+
}
20+
21+
@Test
22+
public void shouldreturn1A2BWhenInputDifferentNumber(){
23+
Number number = new Number("1234");
24+
assertEquals("1A2B",number.compare("1325"));
25+
}
26+
27+
@Test
28+
public void shouldreturn0A0BWhenInputDifferentNumber(){
29+
Number number = new Number("1234");
30+
assertEquals("0A0B",number.compare("5678"));
31+
}
32+
}

Replace_Vowel_Character/.classpath

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<classpath>
3+
<classpathentry kind="src" path="src"/>
4+
<classpathentry kind="src" path="test"/>
5+
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
6+
<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4"/>
7+
<classpathentry kind="lib" path="lib/mockito-all-1.9.5.jar"/>
8+
<classpathentry kind="output" path="bin"/>
9+
</classpath>

Replace_Vowel_Character/.project

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<projectDescription>
3+
<name>Replace_Vowel_Character</name>
4+
<comment></comment>
5+
<projects>
6+
</projects>
7+
<buildSpec>
8+
<buildCommand>
9+
<name>org.eclipse.jdt.core.javabuilder</name>
10+
<arguments>
11+
</arguments>
12+
</buildCommand>
13+
</buildSpec>
14+
<natures>
15+
<nature>org.eclipse.jdt.core.javanature</nature>
16+
</natures>
17+
</projectDescription>
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
eclipse.preferences.version=1
2+
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
3+
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
4+
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
5+
org.eclipse.jdt.core.compiler.compliance=1.8
6+
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
7+
org.eclipse.jdt.core.compiler.debug.localVariable=generate
8+
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
9+
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
10+
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
11+
org.eclipse.jdt.core.compiler.source=1.8
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
860 Bytes
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.

0 commit comments

Comments
 (0)