Scanner for long integer, Exception in thread “main” java.util.InputMismatchException

时光怂恿深爱的人放手 提交于 2019-11-28 12:07:40

问题


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!


回答1:


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() ;



回答2:


The maximum Integer value is 2147483647. Instead, use long:

long credNumber = kbd.nextLong();

or better use String for credit card number:

String credNumber = kbd.nextLine();



回答3:


You should use:

long credNumber = kbd.nextLong();
boolean n = isValid(credNumber);

as the value you enter (16 digits) is over the limit of int.

Your validation method accepts long so, your code should work fine with above change.

public static boolean isValid(long number)



回答4:


You can also convert your int to BigInteger and then call the add function on BigInteger objects



来源:https://stackoverflow.com/questions/19698025/scanner-for-long-integer-exception-in-thread-main-java-util-inputmismatchexce

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!