问题:
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 < / p>
如果校验和为10,则根据ISBN-10将最后一位数字表示为X. 惯例。
编写一个程序,提示用户输入前9位数字并显示10位ISBN(包括前导零)。您的程序应该将输入读作整数。
以下是示例运行:
输入ISBN的前9位数字:整数:013601267
ISBN-10编号为0136012671
我的代码:
import java.util.Scanner;
public class ISBN_Number {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
int[] num = new int[9];
System.out.println("Enter the first 9 digits of the an ISBN as integer: ");
for (int i = 0; i < num.length; i++) {
for (int j = 1; j < 10; j++) {
num[i] = s.nextInt() * j;
}
}
int sum = 0;
for (int a = 0; a < 10; a++) {
sum += num[a];
}
int d10 = (sum % 11);
System.out.println(d10);
if (d10 == 10) {
System.out.println("The ISBN-10 number is " + num + "X");
} else {
System.out.println("The ISBN-10 number is" + num);
}
}
}
ISSUE: 我是学习java的新手,因此我无法解决这个问题。有些人可以告诉我哪里出错了,因为我没有得到预期的结果。谢谢。
答案 0 :(得分:0)
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);
}
答案 1 :(得分:0)
由于
for (int i = 0; i < num.length; i++) {
for (int j = 1; j < 10; j++) {
num[i] = s.nextInt() * j;
}
}
这里你的每个输入将乘以9次
就像用户输入2时一样 然后2将乘以......上显示的(2 * 1)(2 * 2)(2 * 3)....所以这里在num [0] == 18(2 * 9)