なぜ私の出力がそうではないかを調べようとしています。与えられたサンプルは、UPCを(終了する空白行を入力してください)UPCコードの問題
入力されている:036000291453チェックデジット は次のようになります。2チェックデジットである:3 UPCは(空白を入力してUPCを入力し、有効な
ではありません終了する行):036000291452チェックデジット は次のようになります。2チェックデジットがある:014633149077チェックデジット は次のようになります:2 UPCは、UPCを(終了する空白行を入力してください)を入力し、有効な
ある4チェックデジットです:7 UPCが無効です
UPCを入力してください(終了する空白行を入力してください):014633149074チェック桁 は以下のようになります:4チェック桁数:4 UPCが有効です
UPCを入力してください(終了する空白行を入力してください):0853911765722 ERROR! 085391176572チェックデジット は次のようになります:2チェックデジットは次のとおりです。2 UPCは空白を入力します(UPCを入力し、有効な
あるUPC は正確に12桁
は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