Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file modified bin/StringCalculator.class
Binary file not shown.
Binary file modified bin/StringCalculatorException.class
Binary file not shown.
Binary file modified bin/StringCalculatorTest.class
Binary file not shown.
184 changes: 179 additions & 5 deletions src/StringCalculator.java
Original file line number Diff line number Diff line change
@@ -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;
}

}
4 changes: 4 additions & 0 deletions src/StringCalculatorException.java
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@

public class StringCalculatorException extends Exception {

public StringCalculatorException(){
System.out.println("Invalid number");
}

}
168 changes: 166 additions & 2 deletions tests/StringCalculatorTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -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");
}

}