首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >校验和- ISBN程序

校验和- ISBN程序
EN

Stack Overflow用户
提问于 2013-12-09 18:31:54
回答 4查看 8.1K关注 0票数 0

这个问题使我感到困惑。我试着使用这样的循环:基本上,我尝试从输入中获取第一个数字,并执行公式,但它似乎不起作用。看上去很简单,但我想不出来。你能帮我一下吗?谢谢。

代码语言:javascript
复制
public static int ISBN(String ninedigitNum) {
   number = 9;
   while (number > 0) {
   int nextDigit = ninedigitNum.substring(0,1);

   ...
}

校验和(资料来源:普林斯顿大学)。国际标准书号(ISBN)是唯一指定一本书的10位码。最右边的数字是一个校验和数字,它可以从其他9位数字中唯一确定,条件是d1 + 2d2 + 3d3 +.+ 10d10必须是11的倍数(这里di表示右边的第1位数字)。校验和数字d1可以是从0到10的任意值: ISBN惯例是使用值X表示10。例如:对应于020131452的校验和数字是5,因为它是d1 + 2*2 + 3*5 + 4*4 + 5*1 + 6*3 + 7*1 + 8*0 + 9*2 + 10*0的唯一值。创建一个以9位整数为输入的d1方法ISBN(),并返回10位ISBN数。创建3个JUnit测试用例来测试您的方法。

我明白了,非常感谢大家!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-12-09 19:07:27

它不起作用呢?无论哪种方式,我认为您所缺少的是您不断地获得相同的子字符串,这将是字符串的第一个编号:int nextDigit = ninedigitNum.substring(0,1);。此外,您还需要使用int,而不是String;如果需要,可以从字符串转换为int,但是问题本身需要一个int。

有两种方法可以让人联想到这一点。我会这样做,通过意识到mod的幂为10会给你一个整数的数字,但更容易的方法是转换成一个字符数组,然后直接访问。请注意,这里没有错误检查;您必须自己添加。此外,这里还有很多“神奇数字”:好的代码通常很少,非常少。在尝试这样的问题之前,我建议学习更多的数据结构;老实说,至少没有数组和链接列表,几乎没有什么事情可以做。

代码语言:javascript
复制
char[] ISBN = ninedigitNum.toCharArray();

//Process each number
int total = 0;
for(int i=0; i<9; i++){
    int current_int = Integer.parseInt(ISBN[i]);
    total += current_int * (10 - i)
}

//Find value of d1
for(int i=0; i<9; i++){
    if(((total + i) % 11) == 0){
        total += i*100000000;
        break;
    }
}

return total;

通常:在System.out.println(x);中使用打印输出,或者使用编译器的调试器来查看处理过程中发生了什么。

票数 2
EN

Stack Overflow用户

发布于 2013-12-09 20:24:15

这就是我写的代码。我仍然认为它可以更有效率。

代码语言:javascript
复制
public class Problem3 {
    public static String ISBN(String x)
    {
       char[]temp = x.toCharArray();
       int counter = 2;
       int sum = 0;
       int j=0;
       for(int i=8;i>=0;i--)
       {
           sum+= counter*Integer.parseInt(""+temp[i]);
           counter+=1;
       }
       for(j=0;j<10;j++)
       {
           if((sum+j)%11==0)
           {
               break;
           }
       }
       return x+""+j;
    }
public static void main(String args[])    
{
   String a = "020131452"; 
   System.out.println(ISBN(a));

}
}

希望这能有所帮助。

票数 2
EN

Stack Overflow用户

发布于 2013-12-09 20:26:18

这样做是可行的:

代码语言:javascript
复制
public static int ISBN(String nineDigitNum){
    int sum = 0;
    for(int i = 0; i<nineDigitNum.length(); i++){
        sum += Integer.parseInt(""+nineDigitNum.charAt(i))*(10-i);
    }
    return (sum%11);
}

我还相信,如果校验和为10,它应该返回一个X,因此您可以更改返回类型并在某个地方添加一个if语句,或者将if语句放在使用此方法的任何地方。

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

https://stackoverflow.com/questions/20477972

复制
相关文章

相似问题

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