如何为UPC检查代码停止无限循环

时间:2014-10-12 21:23:15

标签: java eclipse loops barcode infinite

我的代码有一个无限循环,我似乎无法打破它。此外,当插入一个空行时,我被告知存在索引错误。请帮忙!

检查有效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!");
                }

            } 
    }

2 个答案:

答案 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并添加所有奇数索引。 此外,您永远不会检查该行是否为空。