Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
429 views
in Technique[技术] by (71.8m points)

java.util.scanner - Scanner for long integer, Exception in thread "main" java.util.InputMismatchException

I am at the last step to finalize my program, however whenever I enter my integer (long) I get a input mismatch:

Compiler message: "Exception in thread "main" java.util.InputMismatchException: For input               string: "4388576018402626"
at java.util.Scanner.nextInt(Scanner.java:2097)
at java.util.Scanner.nextInt(Scanner.java:2050)
at CreditCardValidation.main(CreditCardValidation.java:12)"

My code is as follows:

import java.util.Scanner ; //import Scanner

public class CreditCardValidation {

public static void main (String[] args){

    Scanner kbd = new Scanner(System.in) ;

    System.out.println("Please enter Creditcard number: " ) ;

    int credNumber = kbd.nextInt() ;

    boolean n = isValid( credNumber ) ;

if (credNumber == 0 )
    System.exit(0) ;

do {                

    System.out.println("Please enter Creditcard number: " ) ;
    credNumber = kbd.nextInt() ;
    }
    while ( credNumber < 0 ) ;

if (credNumber > 0 )
    System.out.print("This credit card number is " + n ) ;




}

/*
Return true is the number is a valid card number.
*/

public static boolean isValid(long number) {


    long p = getPrefix(number, 1);
    long p2 = getPrefix(number, 2);
    int n = getSize(number);


    if ((p == 4 || p == 5 || p == 6 || p2 == 37)&& (n < 13 || n > 16) && (((sumOfDoubleEvenPlace(number) + sumOfoddPlace(number))) % 10) == 0)
        return true ;
    else
        return false ;

}


/* The sum of every other digit, doubled, starting with the first digit. */

public static int sumOfDoubleEvenPlace(long number) {
    int sum = 0;
    int maxDigitLenth = 16;
    for (int i = 1; i <= maxDigitLenth; i++)
    {
        if (i % 2 == 0)
        {
            sum = sum + getDigit((int)(number % 10) * 2);
        }
        number /= 10;
    }
    return sum;
}

/*
Return the number if it is 0-9, otherwise return the sum of
the digits of the number.
*/

public static int getDigit(int number) {
    if (number < 10) {

        return number;
    }
    else {

        return (number / 10) + (number % 10);
    }

    }
/*
Return the sum of the odd-place digits.
*/

public static int sumOfoddPlace(long number) {
    int maxDigitLength = 16;
    int sum = 0;
    for (int i = 1; i <= maxDigitLength; i++)
    {

        if (i % 2 == 1)
        {
            sum = sum + (int)(number % 10);
        }
       number /= 10;
    }
    return sum;
}

/*
Return the number of digits in d
*/

public static int getSize(long d) {

    int size = 0 ;

    while( d > 0 ) {
        d = d / 10 ;
        size = size + 1 ;       
    }
    return size ;
}

/*
Return the first k number of digits from number. If the number of digits in number is 
less than k, return the number.
*/

public static long getPrefix(long n, int k) {

    int f = getSize(n)-k;

    long prefix = n/((long)(Math.pow(10, f)));

    return prefix;
    }

/*
Return true if the digit d is a prefix for number.
*/

public static boolean prefixMatched( long number, int d ) {

    if ( d == getPrefix(number, 4))

        return true ;
    else
        return false ;

    }

}

Thank you for your time!

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

That is because the value you're entering is beyond the range of integer values. You need to use long in this case. The max value of integer is 2147483647.

long credNumber = kbd.nextLong();
..
// in the do while loop also
credNumber = kbd.nextLong() ;

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...