Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

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