Hallo Leute,
ich habe ein Programm geschrieben, dass mir eine beliebige Anzahl von ISBN auf ihre Gültigkeit überprüfen soll. Leider funktionieren ein paar Kleinigkeiten noch nicht so richtig...Und zwar:
1. Bsp:
java IsbnTester 9783486582314 3170192868 9783170192867 9783486582314
Dabei wird nur die erste ISBN für gültig erklärt, der Rest für ungültig! Und das, obwohl ich die erste (gültige) ISBN zum Test noch mal an vierter Stelle habe testen lassen. Wenn man die anderen ISBN einzeln überprüft, berechnet er mir auch, dass sie gültig sind (was auch auf jeden Fall so ist). Kann mir jemand sagen, woran das liegen könnte?
2. Ich wollte noch einbauen, dass eine Fehlermeldung ausgespuckt wird, wenn man in eine ISBN irgendwelche Buchstaben (aus Versehen) eintippt (z.B. 473kjl8n10): siehe die drei auskommentierten if-Bedingungen bei ISBN 13-stellig. Irgendwie funktioniert aber keines der drei so 100%ig...also noch mal: Jede ISBN soll auf [a-zA-Z] überprüft werden und dann soll eine Fehlermeldung ausgespuckt werden.
Ich bin für jede Hilfe dankbar!
Grüße
public class IsbnTester {
public static void main(String[] args) {
int i = args.length; //Anzahl der eingegebenen ISBN
int stringstelle = 0; //Index fuer args
int[] z = new int[13]; //Array fuer Ziffern 1 bis 10 bzw. 13
int pruefsumme = 0;//Pruefsumme
int pruefzahl = 0; //Pruefzahl
int einser = 0; //Zahlen, die mit 1 multipliziert werden
int dreier = 0; //Zahlen, die mit 3 multipliziert werden
for (int zaehler = 1; zaehler <= i; zaehler++) {
String isbn = (args[stringstelle]);
if (isbn.length() == 10) {
for (int n = 0; n < 10; n++) {
if (n < 9)
z[n] = (int)(isbn.charAt(n) - 48);
else {
if (isbn.endsWith("X") | isbn.charAt(n) == 'x')
z[n] = 10;
else
z[n] = (int)(isbn.charAt(n) - 48);
}
if (n < 9)
pruefsumme += (z[n] * (10 - n));
}
if (isbn.charAt(9) == '0')
pruefzahl = pruefsumme % 11;
else
pruefzahl = 11 - (pruefsumme % 11);
if (pruefzahl == z[9])
System.out.println("Die ISBN "+isbn+" ist gueltig!");
else
System.out.println("Die ISBN "+isbn+" ist leider ungueltig!");
}
else if (isbn.length() == 13 && (isbn.startsWith("978") | isbn.startsWith("979"))) {
/*if (isbn.contains(['[a-z]*')) {
System.out.println("Die ISBN "+isbn+" ist leider ungueltig! Bitte nur Ziffern 0-9 verwenden!");
return;
}
int index = isbn.indexOf('m');
if (index != -1) {
System.out.println("Die ISBN "+isbn+" ist leider ungueltig! Bitte nur Ziffern 0-9 verwenden!");
return;
}
if (isbn.matches("\\p{Alpha}+")) {
System.out.println("Die ISBN "+isbn+" ist leider ungueltig! Bitte nur Ziffern 0-9 verwenden!");
break;
}*/
for (int n = 0; n < 13; n++) {
z[n] = (int)(isbn.charAt(n) - 48);
int feld = n % 2;
if (feld == 0 && n < 12)
einser += z[n];
else if (feld != 0 && n < 12)
dreier += (z[n] * 3);
}
pruefsumme = dreier + einser;
if (isbn.charAt(12) == '0')
pruefzahl = pruefsumme % 10;
else
pruefzahl = 10 - (pruefsumme % 10);
if (pruefzahl == z[12])
System.out.println("Die ISBN "+isbn+" ist gueltig!");
else
System.out.println("Die ISBN "+isbn+" ist leider ungueltig!");
}
else
System.out.println("Ungueltige Eingabe fuer ISBN "+isbn+"! Ueberpruefen Sie:\n"+""+
"1. ISBN 10- oder 13-stellig? \n2. Falls 13-stellig: Ersten drei Ziffern = 978 "+
"oder 979? \n3. Eingabe ohne Bindestriche?");
++stringstelle;
}
if (args.length == 0)
System.out.println("Ungueltige Eingabe! Ueberpruefen Sie:\n1. ISBN 10- oder 13-stellig?"+""+
"\n2. Falls 13-stellig: Ersten drei Ziffern = 978 oder 979?\n3. Eingabe ohne Bindestriche?");
}
}