我一直在試圖找出爲什麼我的輸出不是它應該是。給出的樣品是UPC代碼問題
輸入UPC(輸入一個空行退出):036000291453校驗位 應該是:2校驗位爲:3 UPC無效
輸入UPC(進入一個空白行退出):036000291452校驗位 應該是:2校驗位爲:2 UPC有效
輸入UPC(輸入一個空行退出):014633149077校驗位 應該是:4校驗位爲:7 UPC無效
輸入UPC(輸入一個空行退出):014633149074校驗位 應該是:4校驗位爲:4 UPC有效
輸入UPC(輸入一個空行退出):0853911765722錯誤! UPC 必須剛好有12位
輸入UPC(輸入一個空行退出):085391176572校驗位 應該是:2校驗位爲:2 UPC有效
輸入UPC(進入一個空白退出):再見!
獲得該輸出的算法是此從左至右,添加位數奇數位置(開始爲1的計數),並乘以3. 結果從左至右,加在第1步中計算出的總數爲偶數位置的數字 取第2步的結果並計算除以10後的餘數(模數爲10)。如果餘數不爲零,則從10中減去該餘數以得到校驗位。如果餘數是零,那麼校驗位應該是0
String str1 = validinput(in);
int odd1 = odd(str1);
int even1 = even(str1);
int f = (odd1+even1)%10;
if(f != 0){
f = 10-f;
}
System.out.println(odd1);
System.out.println(even1);
System.out.println("Check digit should be: "+f);
System.out.println("Check digit is: "+str1.charAt(11));
int y = Character.getNumericValue(str1.charAt(11));
if (f == y){
System.out.println("UPC is valid");
}
else{
System.out.println("UPC is not valid");
}
}
private static String validinput(Scanner inScanner){
System.out.print("Enter a UPC (enter a blank line to quit): ");
String str = inScanner.nextLine();
while(str.length() != 12){
if (str.length() == 0){
System.out.println("Goodbye");
break;
}
else{
System.out.println("ERROR! UPC MUST have exactly 12 digits");
System.out.print("Enter a UPC (enter a blank line to quit): ");
str = inScanner.nextLine();
}
}
return str;
}
private static int odd(String input){
int i = 1;
char ch;
int sumOdd = 0;
while (i < 11){
ch = input.charAt(i);
int x = Character.getNumericValue(ch);
sumOdd = x +sumOdd;
i += 2;
}
int Mx3=sumOdd*3;
return Mx3;
}
private static int even(String input){
int i = 0;
char ch;
int sumEven = 0;
while (i < 11){
ch = input.charAt(i);
int x = Character.getNumericValue(ch);
sumEven = x +sumEven;
i += 2;
}
return sumEven;
}
由於這個問題是奇數和偶數。 – Ryan