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
Please try giving full file path like given 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(\"C:\\\\Users\\\\Desktop\\\\chegg\\\\CreditCardEvaluation.txt\"));
PrintWriter pwInvalid = new PrintWriter(new File(\"C:\\\\Users\\\\Desktop\\\\chegg\\\\invalid_numbers.txt\"));
PrintWriter pwValid = new PrintWriter(new File(\"C:\\\\Users\\\\Desktop\\\\chegg\\\\valid_cards.txt\"));
String value;
CreditCard cc;
// loop till end of the file
while (in.hasNextLine())
{
value = in.nextLine();
//System.out.println(value);
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();
}
}






