keep getting this error Exception in thread main javalangNul

keep getting this error Exception:

in thread \"main\" java.lang.NullPointerException

at CreditCard.validateCardNum(CreditCard.java:33)

at CreditCard.main(CreditCard.java:135)

here is the code

inside the CreditCardEvaluation.txt is below:

3158539628375348

3337465828248404

3112804683572030

3112804683572033

5435528978467581

code is below:

import java.io.File;

import java.io.PrintWriter;

import java.util.Scanner;

public class CreditCard

{

String value;

char valArray[];

int valid[];

int invalid[];

int reverse[];

int multipleOdd[];

int addDigits[];

int dropLast;

// constructor

public CreditCard(String cardNum)

{

if (cardNum.length() >= 13 && cardNum.length() <= 19)

{

value = cardNum;

}

valArray = new char[cardNum.length()];

valid = new int[valArray.length];

reverse = new int[valArray.length];

multipleOdd = new int[valArray.length];

addDigits = new int[valArray.length];

dropLast = 0;

}

// validateCardNum method that validates the card number and returns

// boolean value

public boolean validateCardNum()

{

valArray = value.toCharArray();

for (int i = 0; i < valArray.length; i++)

{

valid[i] = (int) valArray[i];

}

for (int i = 0; i < valArray.length; i++)

{

valid[i] = Integer.parseInt(String.valueOf(valArray[valid.length - 1]));

}

dropLast = valid[valid.length - 1];

reverse = reverseArray(valid);

multipleOdd = multiplyAllOdd(reverse);

addDigits = sumDigits(multipleOdd);

int sum = 0;

for (int i = 0; i < addDigits.length; i++)

{

sum = sum + addDigits[i];

}

boolean isValid = isValidSum(sum, dropLast);

return isValid;

}

// reverseArray method that returns a integer array

public int[] reverseArray(int valid[])

{

for (int i = 0; i < valid.length; i++)

{

reverse[i] = valid[valid.length - 1 - i];

}

return reverse;

}

// multiplyAllOdd method that returns a integer array

public int[] multiplyAllOdd(int valid[])

{

for (int i = 0; i < valid.length; i++) { if (i % 2 == 0)

{

multipleOdd[i] = valid[i] * 2;

}

else { multipleOdd[i] = valid[i];

}

}

return multipleOdd;

}

// sumDigits method that returns a integer array

public int[] sumDigits(int valid[])

{

int sum = 0;

for (int i = 0; i < valid.length; i++)

{

sum = 0;

if (valid[i] >= 10) { sum = valid[i] / 10 + valid[i] % 10; addDigits[i] = sum;

}

else

{

addDigits[i] = valid[i];

}

}

return addDigits;

}

// isValidSum method that returns a boolean value

public boolean isValidSum(int sum, int dropLast)

{

if ((sum + dropLast) % 10 == 0)

{

return true;

}

return false;

}

// getCardIssuer method that returns a String value

public String getCardIssuer()

{

if (value.substring(0, 2).equals(\"34\") || value.substring(0, 2).equals(\"37\"))

return \"American Express\";

else if (value.substring(0, 2).equals(\"60\") || value.substring(0, 2).equals(\"62\") || value.substring(0, 2).equals(\"64\") || value.substring(0, 2).equals(\"65\"))

return \"Discover\";

else if (value.substring(0, 2).equals(\"51\") || value.substring(0, 2).equals(\"52\") || value.substring(0, 2).equals(\"53\") || value.substring(0, 2).equals(\"54\") || value.substring(0, 2).equals(\"51\"))

return \"MasterCard\";

else

if (value.substring(0, 1).equals(\"4\")) return \"Visa\";

else

return \"No Issuer\";

}

// main method

public static void main(String args[]) throws Exception

{

Scanner in = new Scanner(new File(\"CreditCardEvaluation.txt\"));

PrintWriter pwInvalid = new PrintWriter(new File(\"invalid_numbers.txt\"));

PrintWriter pwValid = new PrintWriter(new File(\"valid_cards.txt\"));

String value;

CreditCard cc;

// loop till end of the file

while (in.hasNextLine())

{

value = in.nextLine();

cc = new CreditCard(value);

// write the valid card numbers into valid text file

if (cc.validateCardNum())

{

pwValid.println(cc.getCardIssuer() + \"\\t\" + value + \"\\t\" + value.length());

}
// write the invalid card numbers into invalid text file

else pwInvalid.println(cc.getCardIssuer() + \"\\t\" + value + \"\\t\" + value.length());

}

// close all the files

pwInvalid.close();

pwValid.close();

in.close();

}

}

Solution

import java.io.File;
import java.io.PrintWriter;
import java.util.Scanner;

public class CreditCard {
   String value;
   char valArray[];
   int valid[];
   int invalid[];
   int reverse[];
   int multipleOdd[];
   int addDigits[];
   int dropLast;

   // constructor
   public CreditCard(String cardNum) {
       if (cardNum.length() >= 13 && cardNum.length() <= 19) {
           value = cardNum;
       }
       valArray = new char[cardNum.length()];
       valid = new int[valArray.length];
       reverse = new int[valArray.length];
       multipleOdd = new int[valArray.length];
       addDigits = new int[valArray.length];
       dropLast = 0;
   }

   // validateCardNum method that validates the card number and returns //
   // boolean value

   public boolean validateCardNum() {

       valArray = value.toCharArray();
       for (int i = 0; i < valArray.length; i++) {
           valid[i] = (int) valArray[i];
       }
       for (int i = 0; i < valArray.length; i++) {
           valid[i] = Integer.parseInt(String
                   .valueOf(valArray[valid.length - 1]));
       }
       dropLast = valid[valid.length - 1];
       reverse = reverseArray(valid);
       multipleOdd = multiplyAllOdd(reverse);
       addDigits = sumDigits(multipleOdd);
       int sum = 0;
       for (int i = 0; i < addDigits.length; i++) {
           sum = sum + addDigits[i];
       }
       boolean isValid = isValidSum(sum, dropLast);
       return isValid;
   } // reverseArray method that returns a integer array

   public int[] reverseArray(int valid[]) {
       for (int i = 0; i < valid.length; i++) {
           reverse[i] = valid[valid.length - 1 - i];
       }
       return reverse;
   }

   // multiplyAllOdd method that returns a integer array
   public int[] multiplyAllOdd(int valid[]) {
       for (int i = 0; i < valid.length; i++) {
           if (i % 2 == 0) {
               multipleOdd[i] = valid[i] * 2;
           } else {
               multipleOdd[i] = valid[i];
           }
       }
       return multipleOdd;
   }

   // sumDigits method that returns a integer array
   public int[] sumDigits(int valid[]) {
       int sum = 0;
       for (int i = 0; i < valid.length; i++) {
           sum = 0;
           if (valid[i] >= 10) {
               sum = valid[i] / 10 + valid[i] % 10;
               addDigits[i] = sum;
           } else {
               addDigits[i] = valid[i];
           }
       }
       return addDigits;
   }

   // isValidSum method that returns a boolean value
   public boolean isValidSum(int sum, int dropLast) {
       if ((sum + dropLast) % 10 == 0) {
           return true;
       }
       return false;
   }

   // getCardIssuer method that returns a String value
   public String getCardIssuer() {
       if (value.substring(0, 2).equals(\"34\")
               || value.substring(0, 2).equals(\"37\"))
           return \"American Express\";
       else if (value.substring(0, 2).equals(\"60\")
               || value.substring(0, 2).equals(\"62\")
               || value.substring(0, 2).equals(\"64\")
               || value.substring(0, 2).equals(\"65\"))
           return \"Discover\";
       else if (value.substring(0, 2).equals(\"51\")
               || value.substring(0, 2).equals(\"52\")
               || value.substring(0, 2).equals(\"53\")
               || value.substring(0, 2).equals(\"54\")
               || value.substring(0, 2).equals(\"51\"))
           return \"MasterCard\";
       else if (value.substring(0, 1).equals(\"4\"))
           return \"Visa\";
       else
           return \"No Issuer\";
   }

   // main method
   public static void main(String args[]) throws Exception {
       Scanner in = new Scanner(new File(\"CreditCardEvaluation.txt\"));
       PrintWriter pwInvalid = new PrintWriter(new File(\"invalid_numbers.txt\"));
       PrintWriter pwValid = new PrintWriter(new File(\"valid_cards.txt\"));
       String value;
       CreditCard cc;
       // loop till end of the file
       while (in.hasNextLine()) {
           // changed the here to read next number instead of getting line
           value = in.next();
           cc = new CreditCard(value);
           // write the valid card numbers into valid text file

           if (cc.validateCardNum()) {
               pwValid.println(cc.getCardIssuer() + \"\\t\" + value + \"\\t\"
                       + value.length());
           }
           // write the invalid card numbers into invalid text file
           else
               pwInvalid.println(cc.getCardIssuer() + \"\\t\" + value + \"\\t\"
                       + value.length());
       }
       // close all the files
       pwInvalid.close();
       pwValid.close();
       in.close();
   }
}

CreditCardEvaluation.txt

3158539628375348 3337465828248404 3112804683572030 3112804683572033 5435528978467581 6706465468107999 6304362971054667 6706169762827894 6706169762827892 4844104341377697 4913405490886727 4844885754351829 4844885754351822 6371473570875275 6381475006869978 6389057917814806 347100734345549 347100734345543 6011162533805000 6011621663574413 6011824617460743 6011824617460745 6389057917814802 4539318768050385 36880982786892 36845793345501 36661154562232 36661154562234 5893329089846994 6761680165952016 6763100400984029 6763100400984022 5127043299122389 5330838017737340 5429168755154025 5429168755154023 375354034606481 379570632133224 4485521241443135 4532916206508075 4532916206508076 5590976687287124 5540641137519895 5540641137519892 30522070708059 30066552673241 30365487186802 30365487186801

invalid_numbers.txt

No Issuer   3158539628375348   16
No Issuer   3112804683572033   16
MasterCard   5435528978467581   16
No Issuer   6706465468107999   16
No Issuer   6304362971054667   16
Visa   4844104341377697   16
Visa   4913405490886727   16
Visa   4844885754351829   16
No Issuer   6371473570875275   16
No Issuer   6381475006869978   16
No Issuer   6389057917814806   16
American Express   347100734345549   15
American Express   347100734345543   15
Discover   6011621663574413   16
Discover   6011824617460743   16
Discover   6011824617460745   16
Visa   4539318768050385   16
No Issuer   36880982786892   14
No Issuer   36845793345501   14
No Issuer   36661154562232   14
No Issuer   36661154562234   14
No Issuer   6761680165952016   16
No Issuer   6763100400984029   16
MasterCard   5127043299122389   16
MasterCard   5429168755154025   16
MasterCard   5429168755154023   16
American Express   375354034606481   15
American Express   379570632133224   15
Visa   4485521241443135   16
Visa   4532916206508075   16
Visa   4532916206508076   16
No Issuer   5540641137519895   16
No Issuer   30522070708059   14
No Issuer   30066552673241   14
No Issuer   30365487186802   14
No Issuer   30365487186801   14

valid_cards.txt

No Issuer   3337465828248404   16
No Issuer   3112804683572030   16
No Issuer   6706169762827894   16
No Issuer   6706169762827892   16
Visa   4844885754351822   16
Discover   6011162533805000   16
No Issuer   6389057917814802   16
No Issuer   5893329089846994   16
No Issuer   6763100400984022   16
MasterCard   5330838017737340   16
No Issuer   5590976687287124   16
No Issuer   5540641137519892   16

NOTE: I changed the code next() instead of nextLine() in main method

keep getting this error Exception: in thread \
keep getting this error Exception: in thread \
keep getting this error Exception: in thread \
keep getting this error Exception: in thread \
keep getting this error Exception: in thread \
keep getting this error Exception: in thread \
keep getting this error Exception: in thread \
keep getting this error Exception: in thread \
keep getting this error Exception: in thread \

Get Help Now

Submit a Take Down Notice

Tutor
Tutor: Dr Jack
Most rated tutor on our site