检查isbn 10号java

时间:2017-11-16 20:27:30

标签: java isbn

我应该制作一个程序来控制isbn 10号码的数量。因此,我不允许使用数组,并且数字的输入必须是char。 In方法类似于java scanner。

public class ISBN {

    public static void main(String[] args) {
    System.out.println("ISBN - Pruefung");
    System.out.println("=================");
    System.out.print("ISBN-Nummer: ");
    char isbn = In.read();


    int check = 0;
    int d=0;

    for (d=0; d<10; d++) {

        if ('0' <= isbn && isbn <= '9' ) {
            check = (int) ((isbn-48)*d)+check;
            if(d ==9) {
                int lastDigit = check%11;
                if(lastDigit ==10) {
                    System.out.println("x");
                }else {
                System.out.println(lastDigit);
                }
            }else {
                System.out.print(isbn);
            }

        }else {
            System.out.println(isbn + "Falsche Eingabe");
            System.exit(0);
        }
        isbn = In.read();
    }
    if (d == 10 && check%11 ==0) {
        System.out.println("wahr");
    }else {
        System.out.println("falsch");
    }



    }

}

我用Google搜索了一些isbn 10个数字,但我的程序说他们错了(例如2123456802)。现在我的问题是我的错误和/或理解我最后一个数字的功能错了吗?

1 个答案:

答案 0 :(得分:1)

  

所有十个数字的总和,每个数字乘以其(整数)权重,从10减1,是11的倍数。

所以你只需要将数字值加总时间:

int check = 0;
for(int weight = 10; weight > 0; weigth--){
    char c = In.read(); //get the next character
    int i;
    if( c == 'x' || c == 'X' ){ 
        i = 10;
    } else {     
        if(! Character.isDigit(c)) //Because, just in case...
            throw new IllegalArgumentException("Not a numeric value");

        i = Character.getNumericValue( c );
    }
    check += i * weight;
}

只需检查它是否是11的倍数

if ( check % 11 == 0 )
    System.out.println( "VALID" );
else
    System.out.println( "INVALID" );