我正在处理一个程序,该程序会询问用户输入的ISBN号(9
)的前d1d2d3d4d5d6d7d8d9
位数字,然后打印出{{1}的数字基于等式的数字:
10
如果校验和为(d1 × 1 + d2 × 2 + d3 × 3 + d4 × 4 + d5 × 5 + d6 × 6 + d7 × 7 + d8 × 8 + d9 × 9)%11)
,则根据问题将最后一位数字表示为10
。如果没有,则将最后一个号码添加到ISBN上。除了用户输入的整数以0开始时,我的程序才有效。
实施例
输入:113601267
输出:113601267 6
实施例。
输入:013032342
输出:"这是一个无效的ISBN条目!"
这是我的代码:
X
我在哪里陷入困境,或者发生了什么事?
答案 0 :(得分:1)
你有两个错误:
如果需要,您应该将String
重新格式化为前缀0.
您有Strings
。 String
由char
组成。如果您的第一个ISBN数字是1
,那么您实际上会'1'*1
。由于'1'
是一个字符,因此您将获得char
的int值,即49
。你要做的是从每个char中减去'0'以得到每个char的实际int
值:
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 = String.format("%09d", ISBN); // fixes your 0-bug.
if (st.length() == 9){
r = ((st.charAt(0) - '0') * 1 // fixes your computation bug.
+ (st.charAt(1) - '0') * 2
+ (st.charAt(2) - '0') * 3
+ (st.charAt(3) - '0') * 4
+ (st.charAt(4) - '0') * 5
+ (st.charAt(5) - '0') * 6
+ (st.charAt(6) - '0') * 7
+ (st.charAt(7) - '0') * 8
+ (st.charAt(8) - '0') * 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!");
}
}
答案 1 :(得分:0)
ISBN更像是一个字符串而不是一个数字。
你试过这个吗?
ISBN = keyboard.nextLine();
或
st = keyboard.nextLine();