我一直试图找出为什么我的输出不是它应该是什么。给出的样品是
输入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;
}
答案 0 :(得分:0)
charAt()
使用基于空的索引,但该指令要求您使用基于1的索引。因此,在odd()中,以i = 0开始。在even()中,以i = 1开始。
其次,使用Character.getNumericValue(ch)
获取字符的unicode代码点值,但是指令要求您使用数字值。因此,请改用Integer.parseInt(ch.ToString())
。
private static int odd(String input){
int i = 0;
char ch;
int sumOdd = 0;
while (i < 11){
ch = input.charAt(i);
int x = Integer.parseInt(ch.ToString());
sumOdd = x +sumOdd;
i += 2;
}
int Mx3=sumOdd*3;
return Mx3;
}
private static int even(String input){
int i = 1;
char ch;
int sumEven = 0;
while (i < 11){
ch = input.charAt(i);
int x = Integer.parseInt(ch.ToString());
sumEven = x +sumEven;
i += 2;
}
return sumEven;
}
未经过测试的代码