首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UPC码问题

UPC码问题
EN

Stack Overflow用户
提问于 2017-02-25 01:12:49
回答 1查看 655关注 0票数 1

我一直在试图找出为什么我的产出不是它应该是的。所提供的样本如下

输入一个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。

代码语言:javascript
复制
    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;
 }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-25 01:50:10

charAt()使用基于空的索引,但指令要求您使用基于1的索引.所以,在奇数()中,以i= 0开头。在偶数()中,从i= 1开始。

其次,使用Character.getNumericValue(ch)获取字符的unicode代码点值,但指令要求您使用数字值。所以,使用Integer.parseInt(ch.ToString())代替。

代码语言:javascript
复制
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;
 }

代码未被测试

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42450795

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档