import java.util.Scanner; //import Scanner Class public class CreditCardValidati
ID: 3809196 • Letter: I
Question
import java.util.Scanner;
//import Scanner Class
public class CreditCardValidation
{
public static void main(String[] args)
{
Scanner input=new Scanner(System.in);
long cardNumber1;
System.out.println("Enter a credit card number as a long integer");
cardNumber1=input.nextLong();
if(isValid(cardNumber1))
System.out.println
(cardNumber1+" is valid ");
else
System.out.println
(cardNumber1+" is invalid ");
long cardNumber2;
System.out.println
("Enter a credit card card number as a long integer");
cardNumber2=input.nextLong();
if(isValid(cardNumber2))
System.out.println
(cardNumber2+" is valid ");
else
System.out.println
(cardNumber2+" is invalid ");
}
public static boolean isValid(long number)
{
boolean valid=false;
int digitsCount=getSize(number);
int prefix=(int) getPrefix(number,1);
if((digitsCount>=13 &&digitsCount<=16 ) &&
prefixMatched(number, prefix))
{
long sum=
sumOfDoubleEvenPlace(number)+
sumOfOddPlace(number);
if (sum%10==0)
valid=true;
}
return valid;
}
public static int sumOfDoubleEvenPlace(long number)
{
int evenSum=0;
long rem;
int n;
while(number>0)
{
rem=(number/10)%10;
n=(int) rem;
int result=getDigit(n*2);
evenSum+=result;
number=(number/10)/10;
}
return evenSum;
}
public static int getDigit(int number)
{
int total=0;
if(number>=1 && number <=9)
return number;
else
{
while(number>0)
{
int r=number%10;
total+=r;
number=number/10;
}
}
return total;
}
public static int sumOfOddPlace(long number)
{
int oddSum=0;
long rem;
int n;
while(number>0)
{
rem=number%10;
n=(int) rem;
oddSum+=n;
number=(number/10)/10;
}
return oddSum;
}
public static boolean prefixMatched(long number,int d)
{
boolean matched=false;
switch(d)
{
case 4:matched=true;break;
case 5:matched=true;break;
case 6:matched=true;break;
case 37:matched=true;break;
}
return matched;
}
public static int getSize(long d)
{
int size=0;
while(d>0)
{
d=d/10;
size++;
}
return size;
}
public static long getPrefix(long number,int k)
{
if(getSize(number)<k)
return number;
long result=0;
while(number>0)
{
number=number/10;
if(getSize(number)<=k)
{
result=number;
break;
}
}
return number;
}
}
Enter a credit card number as a long integer
Exception in thread "main" java.util.NoSuchElementException
at java.util.Scanner.throwFor(Unknown Source)
at java.util.Scanner.next(Unknown Source)
at java.util.Scanner.nextLong(Unknown Source)
at java.util.Scanner.nextLong(Unknown Source)
at CreditCardValidation.main(CreditCardValidation.java:11)
Tool completed with exit code 1
this code compiled fine but had the errors below... I got the solution from chegg... can you please help and tell me what's wrong?
This is java... from introduction to java programming by Y Daniel Liang... question 6.31
Explanation / Answer
Hi,
I dont see any issue with this code. It is working fine. My guess here is that you have not supplied the value to the input. That is why you got that issue. Please supply the input.
CreditCardValidation.java
import java.util.Scanner;
//import Scanner Class
public class CreditCardValidation
{
public static void main(String[] args)
{
Scanner input=new Scanner(System.in);
long cardNumber1;
System.out.println("Enter a credit card number as a long integer");
cardNumber1=input.nextLong();
if(isValid(cardNumber1))
System.out.println
(cardNumber1+" is valid ");
else
System.out.println
(cardNumber1+" is invalid ");
long cardNumber2;
System.out.println
("Enter a credit card card number as a long integer");
cardNumber2=input.nextLong();
if(isValid(cardNumber2))
System.out.println
(cardNumber2+" is valid ");
else
System.out.println
(cardNumber2+" is invalid ");
}
public static boolean isValid(long number)
{
boolean valid=false;
int digitsCount=getSize(number);
int prefix=(int) getPrefix(number,1);
if((digitsCount>=13 &&digitsCount<=16 ) &&
prefixMatched(number, prefix))
{
long sum=
sumOfDoubleEvenPlace(number)+
sumOfOddPlace(number);
if (sum%10==0)
valid=true;
}
return valid;
}
public static int sumOfDoubleEvenPlace(long number)
{
int evenSum=0;
long rem;
int n;
while(number>0)
{
rem=(number/10)%10;
n=(int) rem;
int result=getDigit(n*2);
evenSum+=result;
number=(number/10)/10;
}
return evenSum;
}
public static int getDigit(int number)
{
int total=0;
if(number>=1 && number <=9)
return number;
else
{
while(number>0)
{
int r=number%10;
total+=r;
number=number/10;
}
}
return total;
}
public static int sumOfOddPlace(long number)
{
int oddSum=0;
long rem;
int n;
while(number>0)
{
rem=number%10;
n=(int) rem;
oddSum+=n;
number=(number/10)/10;
}
return oddSum;
}
public static boolean prefixMatched(long number,int d)
{
boolean matched=false;
switch(d)
{
case 4:matched=true;break;
case 5:matched=true;break;
case 6:matched=true;break;
case 37:matched=true;break;
}
return matched;
}
public static int getSize(long d)
{
int size=0;
while(d>0)
{
d=d/10;
size++;
}
return size;
}
public static long getPrefix(long number,int k)
{
if(getSize(number)<k)
return number;
long result=0;
while(number>0)
{
number=number/10;
if(getSize(number)<=k)
{
result=number;
break;
}
}
return number;
}
}
Output:
Enter a credit card number as a long integer
12345678910
12345678910 is invalid
Enter a credit card card number as a long integer
321654987
321654987 is invalid
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.