diff --git a/bin/StringCalculator.class b/bin/StringCalculator.class index a937b0c..b934107 100644 Binary files a/bin/StringCalculator.class and b/bin/StringCalculator.class differ diff --git a/bin/StringCalculatorException.class b/bin/StringCalculatorException.class index 4bd9894..096b146 100644 Binary files a/bin/StringCalculatorException.class and b/bin/StringCalculatorException.class differ diff --git a/bin/StringCalculatorTest.class b/bin/StringCalculatorTest.class index d44b83f..44258ae 100644 Binary files a/bin/StringCalculatorTest.class and b/bin/StringCalculatorTest.class differ diff --git a/src/StringCalculator.java b/src/StringCalculator.java index 487916b..618ac83 100644 --- a/src/StringCalculator.java +++ b/src/StringCalculator.java @@ -1,9 +1,183 @@ +import java.util.StringTokenizer; -public class StringCalculator { - public int add(String numbersStr) { - // Returns the sum of the numbers given in numbersStr +public class StringCalculator{ + + public int int1; + public int int2; + + public int add(String numbersStr) throws StringCalculatorException{ + + int int1 = 0; + int int2 = 0; + int result = -1; + String[] token = new String[2]; + + if(countLines(numbersStr) > 1) { + + result = addlines(numbersStr); + + } + + else { + + if(countTokens(numbersStr) == 0) { + + + result = 0; + + } + + else if(countTokens(numbersStr) == 1) { + + + token = getToken(numbersStr); + int1 = getNumber(token[0]); + result = int1; + + } + + + else if(countTokens(numbersStr) == 2) { + + token = getToken(numbersStr); + int1 = getNumber(token[0]); + int2 = getNumber(token[1]); + result = sum(int1, int2); + + } + + else{ + + result = addMoreThanTwoNumbers(numbersStr); + + } + + } + + return result; + + } + + public int addMoreThanTwoNumbers(String s) throws StringCalculatorException{ + + int numTokens = countTokens(s); + + String[] token = getToken(s); + + int number = 0; + + int sum = 0; + + for(int i = 0; i < numTokens; i++) { + + number = getNumber(token[i]); + + sum += number; + + } + + return sum; + + } + + public int addlines(String s) throws StringCalculatorException{ + + String[] line = getLine(s); + int number = 0; + int sum = 0; + int numToken = 0; + + for(int i = 0; i < line.length; i++) { + + numToken = countTokens(line[i]); + + String[] token = new String[numToken]; + + token = getToken(line[i]); + + for(int j = 0; j < numToken; j++) { + + number = getNumber(token[j]); + sum += number; + + } + + } + + return sum; + + } + + public int countTokens(String s) { + + StringTokenizer st = new StringTokenizer(s, ","); + + int tokenNum = 0; + + while(st.hasMoreTokens()) { + + tokenNum ++; + st.nextToken(); + + } + + return tokenNum; + + } + + public int countLines(String s) { + + StringTokenizer st = new StringTokenizer(s, "\n"); + + int lineNum = 0; + + while(st.hasMoreTokens()) { + + lineNum ++; + st.nextToken(); + + } + + return lineNum; + + } + + public String[] getLine(String s) { + + String[] st = s.split("\n"); + + return st; + + } + + public String[] getToken(String s) { + + String[] st = s.split(","); + + return st; + } + + public int getNumber(String s) + throws StringCalculatorException + { + + int number = 0; + number = Integer.parseInt(s); + if(number < 0) + throw new StringCalculatorException(); + else + { + return number; + } + + + + } + + public int sum(int int1, int int2) { + + return int1 + int2; - // not yet implemented - return 0; } + } diff --git a/src/StringCalculatorException.java b/src/StringCalculatorException.java index da71147..8e6b853 100644 --- a/src/StringCalculatorException.java +++ b/src/StringCalculatorException.java @@ -1,4 +1,8 @@ public class StringCalculatorException extends Exception { + public StringCalculatorException(){ + System.out.println("Invalid number"); + } + } diff --git a/tests/StringCalculatorTest.java b/tests/StringCalculatorTest.java index 4ec9afe..3221eff 100644 --- a/tests/StringCalculatorTest.java +++ b/tests/StringCalculatorTest.java @@ -3,10 +3,174 @@ import org.junit.Test; public class StringCalculatorTest { + + //Test countToken method + //------------------------------------------------------------------- + + @Test + public void countToken_0Number() { + StringCalculator sc = new StringCalculator(); + assertEquals(0, sc.countTokens("")); + } + + @Test + public void countToken_1Number() { + StringCalculator sc = new StringCalculator(); + assertEquals(1, sc.countTokens("2,")); + } + + @Test + public void countToken_2Number() { + StringCalculator sc = new StringCalculator(); + assertEquals(2, sc.countTokens("2, 3")); + } + + @Test + public void countToken_3Number() { + StringCalculator sc = new StringCalculator(); + assertEquals(3, sc.countTokens("2, 3, 4")); + } + + //Test getToken method + //------------------------------------------------------------------- + + @Test + public void getToken_1Number() { + StringCalculator sc = new StringCalculator(); + String st[] = new String[1]; + st = sc.getToken("2,"); + assertEquals("2", st[0]); + } + + @Test + public void getToken_2Number() { + StringCalculator sc = new StringCalculator(); + String st[] = new String[2]; + st = sc.getToken("2,3"); + assertEquals("3", st[1]); + } + + //Test getNumber method + //------------------------------------------------------------------- + + @Test + public void getNumber_1() throws StringCalculatorException { + StringCalculator sc = new StringCalculator(); + assertEquals(1, sc.getNumber("1")); + } + + //Test getNumber method + //------------------------------------------------------------------- @Test - public void test() { - fail("Not yet implemented"); + public void sum_1_2() { + StringCalculator sc = new StringCalculator(); + assertEquals(3, sc.sum(1, 2)); } + + //Test add method + //------------------------------------------------------------------- + @Test + public void add_None() throws StringCalculatorException { + StringCalculator sc = new StringCalculator(); + assertEquals(0, sc.add("")); + } + + @Test + public void add_1() throws StringCalculatorException { + StringCalculator sc = new StringCalculator(); + assertEquals(3, sc.add("3")); + } + + @Test + public void add_1_2() throws StringCalculatorException { + StringCalculator sc = new StringCalculator(); + assertEquals(3, sc.add("1,2")); + } + + //Test addMoreThanTwoNumbers method + //------------------------------------------------------------------- + + @Test + public void add_1_2_3_4() throws StringCalculatorException { + StringCalculator sc = new StringCalculator(); + assertEquals(10, sc.addMoreThanTwoNumbers("1,2,3,4")); + } + + @Test + public void add_1_2_3_4_5_6_7_8() throws StringCalculatorException { + StringCalculator sc = new StringCalculator(); + assertEquals(36, sc.addMoreThanTwoNumbers("1,2,3,4,5,6,7,8")); + } + + //Test lineNum method + //------------------------------------------------------------------- + + @Test + public void countLine_1() { + StringCalculator sc = new StringCalculator(); + assertEquals(1, sc.countLines("1,2,3,4")); + } + + @Test + public void countLine_2() { + StringCalculator sc = new StringCalculator(); + assertEquals(2, sc.countLines("1,2\n3,4")); + } + + @Test + public void countLine_3() { + StringCalculator sc = new StringCalculator(); + assertEquals(3, sc.countLines("1\n2\n3,4")); + } + + //Test getLine method + //------------------------------------------------------------------- + + @Test + public void getLine_1() { + StringCalculator sc = new StringCalculator(); + String[] line = sc.getLine("1,2\n3"); + assertEquals("1,2", line[0]); + } + + @Test + public void getLine_2() { + StringCalculator sc = new StringCalculator(); + String[] line = sc.getLine("1,2\n3"); + assertEquals("3", line[1]); + } + + @Test + public void getLine_3() { + StringCalculator sc = new StringCalculator(); + String[] line = sc.getLine("1,2\n3,4,5\n6,7,8"); + assertEquals("6,7,8", line[2]); + } + + //Test addLine method + //------------------------------------------------------------------- + + @Test + public void addLine_2_lines() throws StringCalculatorException { + StringCalculator sc = new StringCalculator(); + assertEquals(6, sc.addlines("1,2\n3")); + } + + @Test + public void addLine_3_lines() throws StringCalculatorException { + StringCalculator sc = new StringCalculator(); + assertEquals(21, sc.addlines("1,2\n3,4\n5,6")); + } + + //Test exceptions + //------------------------------------------------------------------- + + @Test(expected = StringCalculatorException.class) + public void add_exception_negative_input() throws StringCalculatorException { + StringCalculator sc = new StringCalculator(); + sc.addlines("-1"); + } + }