我的代码有一个无限循环,我似乎无法打破它。此外,当插入一个空行时,我被告知存在索引错误。请帮忙!
检查有效UPC的第一步是添加奇数位数并乘以3,然后将该数字加到偶数位数的总和。然后在除以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!");
}
}
}
答案 0 :(得分:0)
您的while
循环正在检查变量length
,但您没有在循环内更改它。因此,循环永远不会结束。
如果你想从扫描仪反复读取一个数字并执行UPC算法,那么读数,分成数字和计算长度都应该在循环内部。如果你只想做一次,那就根本不应该是一个循环。
您的循环条件不应检查长度,因为所有内容都已移入内部。相反,创建一个do-while循环或一个无限while循环:
while ( true ) {
System.out.println("Enter a UPC (enter a blank line to quit): ");
String enterUPC = in.nextLine();
int length = enterUPC.length();
if ( length == 0 ) {
break;
}
// All the rest of the processing is done here.
}
请注意,此循环应该在您定义扫描仪之后。它完成的方式是在用户输入后检查长度。这就是为什么那里有if
语句。
答案 1 :(得分:0)
你需要在while循环中减少长度,否则长度总是等于12或大于0等。另外,你可能想要考虑使用整数而不是输入所有这些声明。然后,您可以使用带有temp char变量的for循环遍历它们,这样您就不必像这样初始化所有这些变量。你的for循环可能如下所示:
char[] arrayChars = new char[enterUPC.length()];
int[] arrayInts = new int[enterUPC.length()];
for(int i=0;i<enterUPC.length();i++) {
char temp=enterUPC.charAt(0);
num[i] = Character.getNumericValue(temp);
}
然后在你的while循环中,遍历int数组并添加所有0 +所有偶数索引并乘以3并添加所有奇数索引。 此外,您永远不会检查该行是否为空。