diff --git a/Assignments/MP4_CalebFontenot/MP4_CalebFontenot.html b/Assignments/MP4_CalebFontenot/MP4_CalebFontenot.html new file mode 100644 index 0000000..b04523f --- /dev/null +++ b/Assignments/MP4_CalebFontenot/MP4_CalebFontenot.html @@ -0,0 +1,215 @@ + + +
+/home/caleb/ASDV-Java/Assignments/MP4_CalebFontenot/src/mp4_calebfontenot/MP4_CalebFontenot.java |
+/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package mp4_calebfontenot; + +import java.util.Scanner; + +/** + * + * @author caleb + */ +public class MP4_CalebFontenot { + + static boolean debug = false; + // Yes, I know the debugger exists. This is just a bit easier imho + + /** + * If the result from Step 4 is divisible by 10, the card number is valid; otherwise, it is invalid. For example, the number 4388576018402626 is invalid, but the number 4388576018410707 is valid + * + * @param CreditCard + * @return + */ + public static boolean isValid(String CreditCard) { + int sumResult = MP4_CalebFontenot.sum(MP4_CalebFontenot.doubleDigitsAndSumSingleDigits(CreditCard), MP4_CalebFontenot.addOddNumbersFromRightToLeft(CreditCard)); + int divisionResult = sumResult % 10; + if (debug) { + System.out.println(sumResult + ", " + divisionResult); + } + if (divisionResult == 0) { + return true; + } else { + return false; + } + } + + /** + * Sum the results from Steps 1, 2 and Step 3. 37 + 38 = 75 + * + * @param step1andSep2 result form step 1 and step 2 + * @param step3 result form step 3 + * @return + */ + public static int sum(int step1andStep2, int step3) { + return step1andStep2 + step3; + } + + /** + * Add all digits in the odd places from right to left in the card number. 6 + 6 + 0 + 8 + 0 + 7 + 8 + 3 = 38 + * + * @param -creditCard the credit card number to be processed. + * @return the sum of digits at odd position from right to left. + */ + public static int addOddNumbersFromRightToLeft(String creditCard) { + if (debug) { + System.out.println("Now executing addOddNumbersFromRightToLeft()"); + } + // Iterate through string + int creditCardLength = creditCard.length(); + int currentDigit, digitProduct, tensDigit, onesDigit, sum = 0; + //System.out.println(creditCard.length()); + + for (int i = (creditCardLength - 1); i >= 0; i--) { + currentDigit = Character.getNumericValue(creditCard.charAt(i)); // Parses current digit as an integer so we can do math on it + if (currentDigit % 2 != 0) { // Is this number an odd number? + sum += currentDigit; + if (debug) { + System.out.println(currentDigit); + System.out.println("sum: " + sum); + } + } + } + + return sum; + } + + /** + * Double every second digit from right to left. If doubling of a digit results in a two-digit number, add up the two digits to get a single-digit number. 2 * 2 = 4 2 * 2 = 4 4 * 2 = 8 1 * 2 = 2 6 * 2 = 12 (1 + 2 = 3) 5 * 2 = 10 (1 + 0 = 1) 8 * 2 = 16 (1 + 6 = 7) 4 * 2 = 8 Step 2 Now add all single-digit numbers from Step 1. 4 + 4 + 8 + 2 + 3 + 1 + 7 + 8 = 37 + * + * @param -creditCard the credit card number to be processed. + * @return + */ + public static int doubleDigitsAndSumSingleDigits(String creditCard) { + if (debug) { + System.out.println("Now executing doubleDigitsAndSumSingleDigits()"); + } + // Iterate through string + int creditCardLength = creditCard.length(); + int currentDigit, digitProduct, tensDigit, onesDigit, sum = 0; + //System.out.println(creditCard.length()); + + for (int i = (creditCardLength - 1); i >= 0; i--) { + if (i % 2 == 0) { + currentDigit = Character.getNumericValue(creditCard.charAt(i)); // Parses current digit as an integer so we can do math on it + if (debug) { + System.out.println("current digit: " + currentDigit); + } + digitProduct = currentDigit * 2; + if (digitProduct > 9) { // Product is larger than 9. Typecast the integer back into a string so we can seperate the digits and add them together. + String workingString = Integer.toString(digitProduct); + tensDigit = Character.getNumericValue(workingString.charAt(0)); + onesDigit = Character.getNumericValue(workingString.charAt(1)); + if (debug) { + System.out.println("tensDigit is " + tensDigit); + System.out.println("onesDigit is " + onesDigit); + } + digitProduct = (tensDigit + onesDigit); + } + sum += digitProduct; + } + + } + if (debug) { + System.out.println("The sum is: " + sum); + } + return sum; + } + + /** + * Displays Q/q or C/c. If the user enters C, it read the credit number and returns it as String. If the user types Q/q returns 0 + * + * @return a string with credit card number or 0. + */ + public static String menu() { + String userInput = ""; + Scanner input = new Scanner(System.in); + + while (!userInput.equals("0"))//user has not entered Q/q + { + System.out.println("Press Q/q to quit"); + System.out.println("Press C/c to enter a credit card"); + userInput = input.next(); + if (userInput.equalsIgnoreCase("q")) { + userInput = "0"; + } + if (userInput.equalsIgnoreCase("c")) { + System.out.print("Please enter a credit card number: "); + userInput = input.next(); + try { //Test to see if user has given us a string that looks like a credit card number + //Does it sucessfully convert to an integer? + Long.parseLong(userInput); + + } catch(Exception e) { + System.out.println("Invalid input: String doesn't look like a credit card, it failed successfully convert into an integer."); + //break; + } + if (userInput.length() != 16) { + System.out.println("Invalid input: String doesn't look like a credit card, incorrect length."); + if (debug) { + System.out.println("length: " + userInput.length()); + } + } else { + break; + } + + } + } + + return userInput; + } + + /** + * + * @param args + */ + public static void main(String[] args) { + + String sampleCreditCard = "4388576018410707"; + String userInput = menu(); + if (userInput == "0") { // Stop program execution if credit card not entered + System.out.println("Credit card not entered!"); + //System.exit(0); + return; + } + + boolean creditCardValidity = MP4_CalebFontenot.isValid(userInput); + String validityString; + if (creditCardValidity) { + validityString = "valid"; + } else { + validityString = "invalid"; + } + + System.out.println("The credit card " + userInput + " is " + validityString); + } + +} + ++ diff --git a/Assignments/MP4_CalebFontenot/src/mp4_calebfontenot/MP4_CalebFontenot.java b/Assignments/MP4_CalebFontenot/src/mp4_calebfontenot/MP4_CalebFontenot.java index ea72cb1..a6a11de 100644 --- a/Assignments/MP4_CalebFontenot/src/mp4_calebfontenot/MP4_CalebFontenot.java +++ b/Assignments/MP4_CalebFontenot/src/mp4_calebfontenot/MP4_CalebFontenot.java @@ -13,7 +13,8 @@ import java.util.Scanner; */ public class MP4_CalebFontenot { - static boolean debug = true; + static boolean debug = false; + // Yes, I know the debugger exists. This is just a bit easier imho /** * If the result from Step 4 is divisible by 10, the card number is valid; otherwise, it is invalid. For example, the number 4388576018402626 is invalid, but the number 4388576018410707 is valid @@ -136,7 +137,23 @@ public class MP4_CalebFontenot { if (userInput.equalsIgnoreCase("c")) { System.out.print("Please enter a credit card number: "); userInput = input.next(); - break; + try { //Test to see if user has given us a string that looks like a credit card number + //Does it sucessfully convert to an integer? + Long.parseLong(userInput); + + } catch(Exception e) { + System.out.println("Invalid input: String doesn't look like a credit card, it failed successfully convert into an integer."); + //break; + } + if (userInput.length() != 16) { + System.out.println("Invalid input: String doesn't look like a credit card, incorrect length."); + if (debug) { + System.out.println("length: " + userInput.length()); + } + } else { + break; + } + } } @@ -153,7 +170,8 @@ public class MP4_CalebFontenot { String userInput = menu(); if (userInput == "0") { // Stop program execution if credit card not entered System.out.println("Credit card not entered!"); - System.exit(0); + //System.exit(0); + return; } boolean creditCardValidity = MP4_CalebFontenot.isValid(userInput); diff --git a/ZIPs/MP4_CalebFontenot.zip b/ZIPs/MP4_CalebFontenot.zip deleted file mode 100644 index dcfd356..0000000 Binary files a/ZIPs/MP4_CalebFontenot.zip and /dev/null differ