我一直在试图找出为什么我的输出不是它应该是。给出的样品是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