JAVA ISBN-10编号:查找第10位

JAVA ISBN-10编号:查找第10位,java,arrays,if-statement,for-loop,isbn,Java,Arrays,If Statement,For Loop,Isbn,问题: ISBN-10由10位数字组成:d1、d2、d3、d4、d5、d6、d7、d8、d9、d10。最后一个数字d10是一个校验和,使用 以下公式: d1*1+d2*2+d3*3+d4*4+d5*5+d6*6+d7*7+d8*8+d9*9%11 如果校验和为10,根据ISBN-10,最后一位数字表示为X 惯例 编写一个程序,提示用户输入前9位数字,并显示包括前导零在内的10位ISBN。程序应将输入读取为整数 以下是运行示例: 将ISBN的前9位输入为整数:013601267 ISBN-10的号

问题:

ISBN-10由10位数字组成:d1、d2、d3、d4、d5、d6、d7、d8、d9、d10。最后一个数字d10是一个校验和,使用 以下公式:

d1*1+d2*2+d3*3+d4*4+d5*5+d6*6+d7*7+d8*8+d9*9%11

如果校验和为10,根据ISBN-10,最后一位数字表示为X 惯例

编写一个程序,提示用户输入前9位数字,并显示包括前导零在内的10位ISBN。程序应将输入读取为整数

以下是运行示例:

将ISBN的前9位输入为整数:013601267

ISBN-10的号码是0136012671

我的代码:

问题: 我对学习java还不熟悉,因此我很难解决这个问题。有人能告诉我哪里出了问题,因为我没有得到预期的结果。谢谢。

nextInt会使用整个令牌013601267,而不仅仅是一个数字,这不是您的计划。更简单的方法是将其作为单个字符串使用,然后迭代字符:

String num = s.next();
int sum = 0;
for (int i = 1; i <= num.length(); ++i) {
    sum += (i * num.charAt(i - 1) - '0');
}

int d10 = (sum % 11);
if (d10 == 10) {
    System.out.println("The ISBN-10 number is " + num + "X");
} else {
    System.out.println("The ISBN-10 number is " + num + d10);
}
因为

 for (int i = 0; i < num.length; i++) {
        for (int j = 1; j < 10; j++) {
            num[i] = s.nextInt() * j;
        }
    }
在这里,您的每个输入将乘以9倍

比如当用户输入2时 然后2将像图中所示的2*12*22*3那样相乘……这里是num[0]==
182*9

您正在尝试从扫描仪读取81个整数……您介意详细说明我是如何读取的吗。我对如何读取81个整数感到困惑。
 for (int i = 0; i < num.length; i++) {
        for (int j = 1; j < 10; j++) {
            num[i] = s.nextInt() * j;
        }
    }