【发布时间】:2014-10-12 21:23:15
【问题描述】:
我的代码有一个无限循环,我似乎无法打破它。另外,插入空行时,我被告知存在索引错误。请帮忙!
检查有效 UPC 的第一步是将奇数位数字相加并乘以三,然后将该数字添加到偶数位数字的总和中。然后计算除以 10 的余数。如果余数不为零,则从 10 中减去该余数以得到校验位。如果余数为零,则校验位应为 0。
public static void main(String[] args) {
Scanner in = new Scanner (System.in);
System.out.println("Enter a UPC (enter a blank line to quit): ");
String enterUPC = in.nextLine();
int length = enterUPC.length();
int checkDigit=0;
char char1, char2, char3, char4, char5, char6, char7, char8, char9, char10, char11, char12;
int num1, num2, num3, num4, num5, num6, num7, num8, num9, num10, num11, num12;
char1 = enterUPC.charAt(0);
num1 = Character.getNumericValue(char1);
char2 = enterUPC.charAt(1);
num2 = Character.getNumericValue(char2);
char3 = enterUPC.charAt(2);
num3 = Character.getNumericValue(char3);
char4 = enterUPC.charAt(3);
num4 = Character.getNumericValue(char4);
char5 = enterUPC.charAt(4);
num5 = Character.getNumericValue(char5);
char6 = enterUPC.charAt(5);
num6 = Character.getNumericValue(char6);
char7 = enterUPC.charAt(6);
num7 = Character.getNumericValue(char7);
char8 = enterUPC.charAt(7);
num8 = Character.getNumericValue(char8);
char9 = enterUPC.charAt(8);
num9 = Character.getNumericValue(char9);
char10 = enterUPC.charAt(9);
num10 = Character.getNumericValue(char10);
char11 = enterUPC.charAt(10);
num11 = Character.getNumericValue(char11);
char12 = enterUPC.charAt(11);
num12 = Character.getNumericValue(char12);
while(length > 0) {
//Algorithm Step One and Algorithm Step Two
int stepOne = (num1 + num3 + num5 + num7 + num9 + num11) * 3;
int stepTwo = stepOne + (num2 + num4 + num6 + num8 + num10);
while (length == 12) {
//Algorithm Step Three
if(stepTwo%10!=0) {
checkDigit = 10 - (stepTwo%10);
}
else {
checkDigit = 0;}
System.out.println("Check digit should be : " + checkDigit);
System.out.println("Check digit is: " + num12);
}
}
if(checkDigit == num12) {
System.out.println("UPC is valid");
}
else {
System.out.println("UPC is not valid");
}
if (length == 0){
System.out.println("ERROR! UPC MUST have exactly 12 digits");
}
else{
System.out.print("Goodbye!");
}
}
}
【问题讨论】:
-
首先你永远不会减少长度,其次,当你有同名但不同数字后缀的变量名时,这应该是一个巨大的危险信号,你应该使用数组(或集合)。
标签: java eclipse loops barcode infinite