如何修复编写代码的java运行时错误以检查UPC是否有效?

如何修复编写代码的java运行时错误以检查UPC是否有效?,java,branch,nested-loops,Java,Branch,Nested Loops,我想编写一个java程序,通过只使用“嵌套while循环”和“分支:if-else”来检查UPC代码是否有效。以下是检查UPC是否有效的公式: 从左到右,在奇数位置添加数字 (从1开始计数)并将结果乘以3 从左到右,将偶数位置的数字加到总数中 在步骤1中计算 取步骤2的结果并计算 除以10的余数(结果模10)。如果剩余的 不是零,从10中减去余数得到校验位。 如果余数为零,则校验位应为0 注意:代码将一直询问,直到收到空白输入 我输入了数字,但没有显示任何内容,所以我该怎么办,谢谢 Sc

我想编写一个java程序,通过只使用“嵌套while循环”和“分支:if-else”来检查UPC代码是否有效。以下是检查UPC是否有效的公式:

  • 从左到右,在奇数位置添加数字 (从1开始计数)并将结果乘以3
  • 从左到右,将偶数位置的数字加到总数中 在步骤1中计算
  • 取步骤2的结果并计算 除以10的余数(结果模10)。如果剩余的 不是零,从10中减去余数得到校验位。 如果余数为零,则校验位应为0
  • 注意:代码将一直询问,直到收到空白输入

    我输入了数字,但没有显示任何内容,所以我该怎么办,谢谢

        Scanner in = new Scanner(System.in);
        System.out.println("Enter a UPC (enter a blank line to quit): ");
        String upc = in.nextLine(); 
        while (upc.length() <12 && upc.length()>0) {
            int even= Character.getNumericValue(upc.charAt(0))+Character.getNumericValue(upc.charAt(2))+Character.getNumericValue(upc.charAt(4))+Character.getNumericValue(upc.charAt(6))+Character.getNumericValue(upc.charAt(8))+Character.getNumericValue(upc.charAt(10));
            int odd= Character.getNumericValue(upc.charAt(1))+Character.getNumericValue(upc.charAt(3))+Character.getNumericValue(upc.charAt(5))+Character.getNumericValue(upc.charAt(7))+Character.getNumericValue(upc.charAt(9))+Character.getNumericValue(upc.charAt(11));
            int sum= even*3+odd;
            int cd= Character.getNumericValue(upc.charAt(11));
            if (sum%10 !=0) {
                int sub= 10-(sum%10);
                if (sub==cd) {
                    System.out.println("Check digit should be: " +sub);
                    System.out.println("Check digit is: "+ cd);
                    System.out.println("valid");
                    System.out.println("Enter a UPC (enter a blank line to quit): ");
                    upc= in.nextLine();
                }
                else {
                    System.out.println("Check digit should be: " +sub);
                    System.out.println("Check digit is: "+ cd);
                    System.out.println("not valid");
                    System.out.println("Enter a UPC (enter a blank line to quit): ");
                    upc= in.nextLine();
                }
            }
        }
    
        if (upc.length()==0) {
            System.out.println("Goodbye");
        }
    
    Scanner-in=新的扫描仪(System.in);
    System.out.println(“输入UPC(输入要退出的空行):”;
    字符串upc=in.nextLine();
    while(upc.length()0){
    int偶数=Character.getNumericValue(upc.charAt(0))+Character.getNumericValue(upc.charAt(2))+Character.getNumericValue(upc.charAt(4))+Character.getNumericValue(upc.charAt(6))+Character.getNumericValue(upc.charAt(8))+Character.getNumericValue(upc.charAt(10));
    int奇数=Character.getNumericValue(upc.charAt(1))+Character.getNumericValue(upc.charAt(3))+Character.getNumericValue(upc.charAt(5))+Character.getNumericValue(upc.charAt(7))+Character.getNumericValue(upc.charAt(9))+Character.getNumericValue(upc.charAt(11));
    整数和=偶数*3+奇数;
    int cd=Character.getNumericValue(upc.charAt(11));
    如果(总和%10!=0){
    int sub=10-(总和%10);
    if(sub==cd){
    System.out.println(“校验位应为:“+sub”);
    System.out.println(“校验位为:“+cd”);
    System.out.println(“有效”);
    System.out.println(“输入UPC(输入要退出的空行):”;
    upc=in.nextLine();
    }
    否则{
    System.out.println(“校验位应为:“+sub”);
    System.out.println(“校验位为:“+cd”);
    System.out.println(“无效”);
    System.out.println(“输入UPC(输入要退出的空行):”;
    upc=in.nextLine();
    }
    }
    }
    如果(upc.length()==0){
    System.out.println(“再见”);
    }
    
    这是一个非常简单的修复程序,可以让它运行。但是您仍然需要添加大量代码,因此它会循环,并且还可以解释用户输入的空白字符串或不是12个字符的字符串

    简单的修复程序如下所示

  • 您的偶数和奇数变量被切换。说charAt(0)是个奇数。因此,切换这两个变量名
  • 在偶数变量上,不需要添加Character.getNumericValue(upc.charAt(11))。字符(11)是校验位,添加时不需要考虑
  • 为了启动while循环,需要将其设置为“upc.length()在键入数字后,您是否按了
    Enter
    ?出现了什么运行时错误?发布完整的堆栈跟踪?在我按Enter键后,它只显示黑屏。在debugger下运行它,您将能够看到逐步执行。我使用eclipse运行调试,它仍然没有显示任何内容,这很奇怪,他说re在命令中运行时是什么样子:非常感谢您的解释!现在我很清楚是的,我在循环中更改了一些变量,就好像用户输入的数字少于或多于12位一样,它也会显示一条消息,让他们再次输入!
    import java.util.Scanner;
    public class UPC_Check {
    
    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 upc = in.nextLine(); 
            while (upc.length() <= 12 && upc.length()>0) {
                int odd= Character.getNumericValue(upc.charAt(0))+Character.getNumericValue(upc.charAt(2))+Character.getNumericValue(upc.charAt(4))+Character.getNumericValue(upc.charAt(6))+Character.getNumericValue(upc.charAt(8))+Character.getNumericValue(upc.charAt(10));
                int even= Character.getNumericValue(upc.charAt(1))+Character.getNumericValue(upc.charAt(3))+Character.getNumericValue(upc.charAt(5))+Character.getNumericValue(upc.charAt(7))+Character.getNumericValue(upc.charAt(9));
                int sum= odd*3+even;
                int cd= Character.getNumericValue(upc.charAt(11));
    
                if (sum%10 !=0) {
                    int sub= 10-(sum%10);
                    if (sub==cd) {
                        System.out.println("Check digit should be: " +sub);
                        System.out.println("Check digit is: "+ cd);
                        System.out.println("valid");
                        System.out.println("Enter a UPC (enter a blank line to quit): ");
                        upc= in.nextLine();
                    }
                    else {
                        System.out.println("Check digit should be: " +sub);
                        System.out.println("Check digit is: "+ cd);
                        System.out.println("not valid");
                        System.out.println("Enter a UPC (enter a blank line to quit): ");
                        upc= in.nextLine();
                    }
                }
            }
    
            if (upc.length()==0) {
                System.out.println("Goodbye");
            }
    
    
    }