Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 校验和-ISBN程序_Java_Loops_Object_Isbn - Fatal编程技术网

Java 校验和-ISBN程序

Java 校验和-ISBN程序,java,loops,object,isbn,Java,Loops,Object,Isbn,这个问题使我困惑不解。我试着使用这样一个循环:基本上,我试着从输入中获取第一个数字,然后计算公式,但它似乎不起作用。看起来很简单,但我想不出来。你能帮我吗?谢谢 public static int ISBN(String ninedigitNum) { number = 9; while (number > 0) { int nextDigit = ninedigitNum.substring(0,1); ... } 校验和(来源:普林斯顿大学)。国际标准 图书

这个问题使我困惑不解。我试着使用这样一个循环:基本上,我试着从输入中获取第一个数字,然后计算公式,但它似乎不起作用。看起来很简单,但我想不出来。你能帮我吗?谢谢

public static int ISBN(String ninedigitNum) {
   number = 9;
   while (number > 0) {
   int nextDigit = ninedigitNum.substring(0,1);

   ...
}
校验和(来源:普林斯顿大学)。国际标准 图书编号(ISBN)是唯一指定图书的10位代码。 最右边的数字是校验和数字,可以唯一 根据d1+2d2条件下的其他9位数字确定+ 3d3+…+10d10必须是11的倍数(此处di表示第i个 右起数字)。校验和数字d1可以是0到0之间的任何值 到10:国际标准书号惯例是用X值表示10。 示例:020131452对应的校验和数字是5,因为是 d1的唯一值介于0和10之间,其中d1+2*2+3*5+ 4*4+5*1+6*3+7*1+8*0+9*2+10*0是11的倍数。创建一个 Java方法ISBN()以9位整数作为输入,计算 校验和,并返回10位ISBN数字。创建3个JUnit测试 案例来测试您的方法


我知道了,非常感谢大家

它不工作了怎么办?不管怎样,我相信您缺少的是不断得到相同的子字符串,这将是字符串的第一个数字:
int-nextDigit=ninedigitNum.substring(0,1)。此外,您需要使用
int
,而不是
字符串
;如果需要,可以从技术上将字符串转换为int,但问题本身需要int

有两种方法可以让人想到。我会这样做,因为10次方的mod会给出一个整数的相应数字,但更简单的方法是转换成字符数组,然后直接访问。注意这里没有错误检查;你得自己加上去。此外,这里还有很多“神奇的数字”:好的代码通常只有很少的数字。我建议在尝试这些问题之前学习更多的数据结构;老实说,如果没有数组和链表,你几乎做不了什么

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;
char[]ISBN=ninedigitNum.tocharray();
//处理每个数字
int-total=0;
对于(inti=0;iSo,
这是我写的一段代码。我仍然认为可以提高效率

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));

}
}
公共类问题3{
公共静态字符串ISBN(字符串x)
{
char[]temp=x.toCharArray();
int计数器=2;
整数和=0;
int j=0;
对于(int i=8;i>=0;i--)
{
sum+=计数器*整数.parseInt(“+temp[i]);
计数器+=1;
}
对于(j=0;j而言,这是有效的:

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);
}
publicstaticintisbn(字符串nineDigitNum){
整数和=0;

对于(int i=0;i,这里有一个不带循环的短循环,它只使用
substring()、charAt()和length()

输出:

> ISBN("123456789")
"123456789X"
> ISBN("123456780")
"1234567806"

您必须从字符串的最后一个索引开始选取每个整数。但是如何获得总共10位数字呢?我们必须以某种方式将其相加,但由于每个数字都乘以不同的数字,因此似乎很难使用循环(d1+2d2+3d3+…+10d10)我还没有真正学习数组,还有其他方法吗?谢谢。我一直遇到的问题是,很难处理每个int并将其保存在某个地方,因为它是一个循环,所以会做同样的事情。例如,我希望第一个数字乘以2。如果我把它放在循环中,这不会让所有的numb都相乘吗ers乘以2?因为其余的数字需要乘以3,4,…9,谢谢!如果你的数学能力比较强,你可以看看如何使用mod(
%
)提取数字10次方的值--x%10=最低阶数字,x%100=下一个最低阶数字,依此类推。我将以编程方式编辑答案本身的示例,但其中重要的部分是从逻辑上思考问题。关于乘法:这是数组的优点,您希望将其分离出来以分离nu各位!我也很惊讶你们竟然在不了解数组的情况下处理此类问题……数组可能是最重要的数据结构。由于校验和数字是最右边的,所以需要将
total
10
相乘,然后加上
I
,还是我遗漏了什么?@Chasmo:在问题描述中,请参见因为某种原因,我认为校验和数字是第一位的;或者至少,我是这样理解的。但实际上,你是对的——校验和数字跟在数据后面,所以你只需要将数字向左移动(按位左移),然后加上校验和。
> ISBN("123456789")
"123456789X"
> ISBN("123456780")
"1234567806"