Scanner für long integer Exception in thread "main" java.util.InputMismatchException
Bin ich auf den letzten Schritt abzuschließen, mein Programm, aber immer, wenn ich in meine lange ganze Zahl (Long) erhalte ich eine 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)"
Mein code ist wie folgt:
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 ;
}
}
Vielen Dank für Ihre Zeit!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist, weil der Wert, die Sie betreten ist außerhalb der Reichweite von integer-Werten. Sie müssen lange in diesem Fall. Der max-Wert der Ganzzahl ist 2147483647.
Long
😉Den maximalen Integer-Wert 2147483647. Verwenden Sie stattdessen lange:
oder besser Zeichenfolge verwenden, für die Nummer der Kreditkarte:
Sollten Sie verwenden:
als der Wert, den Sie eingeben (16 stellen) ist über die Grenze von int.
Den validation-Methode akzeptiert lange so, dein code sollte funktionieren mit den oben ändern.
Können Sie auch konvertieren Sie Ihre int auf BigInteger und rufen Sie dann die Funktion " add " auf BigInteger-Objekte