我正在编写一个程序,该程序将要求用户输入的第一个9
数字的ISBN编号(d1d2d3d4d5d6d7d8d9
),然后用10
打印出该编号基于下述等式个数位:字符串长度未正确打印,前面为0
(d1 × 1 + d2 × 2 + d3 × 3 + d4 × 4 + d5 × 5 + d6 × 6 + d7 × 7 + d8 × 8 + d9 × 9)%11)
如果校验10
,最后一位数字是根据该问题表示为X
。如果不是,最后一个数字将被添加到ISBN上。除了当用户输入整数以0开头时,我的程序工作。
例
输入:113601267
输出:113601267
例
输入:013032342
输出: “这是一个无效的ISBN条目”
这里是我的代码:
int ISBN, r, i;
String st;
Scanner keyboard;
keyboard = new Scanner(System.in);
System.out.println("Please enter the first 9 digits of your ISBN number:");
ISBN = keyboard.nextInt();
st = ("" + ISBN);
if (st.length() == 9){
r = (st.charAt(0) * 1 + st.charAt(1) * 2 + st.charAt(2) * 3 + st.charAt(3) * 4 + st.charAt(4) * 5 + st.charAt(5) * 6 + st.charAt(6) * 7 + st.charAt(7) * 8 + st.charAt(8) * 9);
if (r % 11 == 10){
System.out.println("Your ISBN Number is: " + ISBN + "X");
}
else {
System.out.println(st);
i = (ISBN * 10) + (r % 11);
System.out.println("Your ISBN Number is: " + i);
}
}
else {
System.out.println("This is an invalid ISBN entry!");
}
哪儿了我搞砸了,或者是怎么回事?
you're要求的'int'所以你得到的'int'。一个数字不关心前导零,并将它们分开。你可以使用'keyboard.nextLine()'或'keyboard.next()'来开始。 – SomeJavaGuy
我可以,但在它的问题说:编写一个程序,提示用户输入前9位数字,并显示包括前导零的10位ISBN, 。 **您的程序应读取输入为整数** – bordia
您的ISBN是一个字符串而不是数字。领先的'0'事项,而一个数字将放弃这些。你应该用'scanner.next()'将它作为一个字符串读取,而不是将它转换为数字,然后返回到String中。 –