我应该制作一个程序来控制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)。现在我的问题是我的错误和/或理解我最后一个数字的功能错了吗?
答案 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" );