Commit 7ca950e

mo <mo.khan@gmail.com>
2019-06-10 01:59:20
sum the odd digits
1 parent 98592c5
src/Q3/CreditCard.java
@@ -12,6 +12,16 @@ public class CreditCard {
   public CreditCard(String num) {
     this.ccNumber = num;
     this.company = this.identifyCompany(num);
+    String reversed = new StringBuilder(num).reverse().toString();
+    for (int i = 0; i < reversed.length(); i++) {
+      if (!Character.isDigit(reversed.charAt(i))) break;
+
+      int digit = Character.getNumericValue(reversed.charAt(i));
+      if ((i + 1) % 2 == 0) {
+      } else {
+        this.oddSum += digit;
+      }
+    }
   }
 
   public int getEvenSum() {
@@ -35,7 +45,7 @@ public class CreditCard {
   }
 
   public boolean isValid() {
-    return this.validateCompany() && this.validateLength();
+    return this.validateCompany() && this.validateLength() && this.validateNumber();
   }
 
   public boolean isDivisibleBy10() {
src/Q3/CreditCardTest.java
@@ -16,11 +16,6 @@ public class CreditCardTest extends TestCase {
     return new TestSuite(CreditCardTest.class);
   }
 
-  public void testTruthy() {
-    assertEquals(true, true);
-    assertTrue(true);
-  }
-
   public void test_getCompany() {
     assertEquals(CreateSUT("4111111111111111").getCompany(), "Visa");
     assertEquals(CreateSUT("5555555555554444").getCompany(), "MasterCard");
@@ -42,16 +37,19 @@ public class CreditCardTest extends TestCase {
     assertFalse(CreateSUT("hello").validateNumber());
   }
 
-  // public void test_getEvenSum() {
-  // assertEquals(CreateSUT("4388576018402626").getEvenSum(), 0);
-  // }
+  public void test_isValid() {
+    assertFalse(CreateSUT("49927398717").isValid());
+    assertFalse(CreateSUT("1234567812345678").isValid());
+    assertTrue(CreateSUT("4111111111111111").isValid());
+    assertTrue(CreateSUT("5555555555554444").isValid());
+    assertTrue(CreateSUT("378282246310005").isValid());
+    assertTrue(CreateSUT("6011111111111117").isValid());
+  }
 
-  // public void test_isValid() {
-  // assertTrue(CreateSUT("49927398716").isValid());
-  // assertFalse(CreateSUT("49927398717").isValid());
-  // assertFalse(CreateSUT("1234567812345678").isValid());
-  // assertTrue(CreateSUT("1234567812345670").isValid());
-  // }
+  public void test_getOddSum() {
+    assertEquals(42, CreateSUT("49927398716").getOddSum());
+    assertEquals(38, CreateSUT("4388576018402626").getOddSum());
+  }
 
   private CreditCard CreateSUT(String number) {
     return new CreditCard(number);