字符串长度未正确打印,前面为0

时间:2016-09-26 10:54:25

标签: java

我正在处理一个程序,该程序会询问用户输入的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

我在哪里陷入困境,或者发生了什么事?

2 个答案:

答案 0 :(得分:1)

你有两个错误:

  1. 如果需要,您应该将String重新格式化为前缀0.

  2. 您有StringsStringchar组成。如果您的第一个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();