Java 字符串长度打印不正确,前面有0
我正在开发一个程序,该程序将要求用户输入ISBN号码(Java 字符串长度打印不正确,前面有0,java,Java,我正在开发一个程序,该程序将要求用户输入ISBN号码(d1d2d3d4d5d6d7d8d9)的第一位9,然后根据一个等式打印出第十位的号码: (d1 × 1 + d2 × 2 + d3 × 3 + d4 × 4 + d5 × 5 + d6 × 6 + d7 × 7 + d8 × 8 + d9 × 9)%11) 如果校验和为10,则根据问题将最后一位数字表示为X。否则,最后一个数字将添加到ISBN中。除了用户输入的整数以0开头外,我还让程序工作 前 输入:113601267 输出:1136012
d1d2d3d4d5d6d7d8d9
)的第一位9
,然后根据一个等式打印出第十位的号码:
(d1 × 1 + d2 × 2 + d3 × 3 + d4 × 4 + d5 × 5 + d6 × 6 + d7 × 7 + d8 × 8 + d9 × 9)%11)
如果校验和为10
,则根据问题将最后一位数字表示为X
。否则,最后一个数字将添加到ISBN中。除了用户输入的整数以0开头外,我还让程序工作
前
输入:113601267输出:1136012676 前 输入: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!");
}
我在哪里搞砸了,或者发生了什么事?您有两个bug:
字符串
,将其置于0之前字符串
。String
由char
s组成。如果您的第一个ISBN数字是1
,您实际上将执行'1'*1
。由于'1'
是一个字符,您将得到字符的int值,即49
。您需要做的是从每个字符中减去“0”,以获得每个字符的实际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!");
}
}
ISBN与其说是一个数字,不如说是一个字符串 你试过这个吗
ISBN = keyboard.nextLine();
或
您要求的是
int
,因此您得到的是int
。数字不关心前导零,而是将它们分条。您可以使用keyboard.nextLine()
或keyboard.next()
开始。我可以,但问题是:编写一个程序,提示用户输入前9位数字并显示10位ISBN,包括前导零。您的程序应该以整数形式读取输入您的ISBN是字符串而不是数字。前导的0
s很重要,而数字将丢弃这些。您应该使用scanner.next()将其作为字符串读取,而不是将其转换为数字,然后再转换为字符串。除了st.length()之外,它运行得很好。如果整数以0开头,我将其转换为字符串,它将跳转到else语句。可能是因为有一个带0的整数前导,但我被告知需要输入一个整数。ISBN不是int
(或long
或任何数值)。告诉你的老师。ISBN是一个数字字符串
值。感谢您的修复!我照你说的做了,现在让它打印字符串,而不是ISBN整数。这个问题似乎已经解决了。
st = keyboard.nextLine();