程式如下:
import java.util.Scanner;
public class ExamIDcard_31 {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
System.out.print("輸入十六位的卡號:");
long number=input.nextLong();
if(isValid(number)) {
System.out.print("卡號合格");
}
else {
System.out.print("卡號不合格");
}
}
public static boolean isValid(long number) { //判斷輸入的數字是符合銀行卡規定
int size=String.valueOf(number).length();
if(size >= 13 && size <= 16 &&(sumOfOddPlace(number) + sumOfDoubleEvenPlace(number)) % 10 == 0)
return true;
else
return false;
}
public static int sumOfDoubleEvenPlace(long number) { //回傳從左到右對偶數位數字翻倍,然后將所得所有一位數相加的和
int sumEven = 0;
int Even;
int EvenNew;
char Evenchar;
for(int i = 0;i <= String.valueOf(number).length();i = i + 2) {
Evenchar = String.valueOf(number).charAt(i) ;
Even = Integer.parseInt(String.valueOf(number));
if(Even * 2 >= 10){
EvenNew = Even * 2 - 9;
}
else {
EvenNew = Even * 2;
}
sumEven += EvenNew;
}
return sumEven;
}
public static int sumOfOddPlace(long number) { //卡號中從右到左奇數位的每位的數字之和
int sumOdd = 0;
int Odd;
char Oddchar;
String s = String.valueOf(number);
for(int i = 15;i >= 1; i = i - 2) {
Oddchar = String.valueOf(number).charAt(i);
Odd = Integer.parseInt(String.valueOf(number));
sumOdd += Odd;
}
return sumOdd;
}
public static int getSize(String number) //回傳銀行卡長度
{
int Size;
Size = String.valueOf(number).length();
return Size;
}
}
結果如下:
輸入十六位的卡號:4388576018402626
Exception in thread "main" java.lang.NumberFormatException: For input string: "4388576018402626"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:583)
at java.lang.Integer.parseInt(Integer.java:615)
at game1.ExamIDcard_31.sumOfOddPlace(ExamIDcard_31.java:56)
at game1.ExamIDcard_31.isValid(ExamIDcard_31.java:23)
at game1.ExamIDcard_31.main(ExamIDcard_31.java:12)
uj5u.com熱心網友回復:
數字格式例外,輸入的數太大了,可以用字串去接受輸入的數字轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/198776.html
標籤:Java相關
上一篇:求這段代碼詳解
下一篇:【筆記】前端面試必備技巧——概述
