JustinCredible Geschrieben 5. Dezember 2009 Geschrieben 5. Dezember 2009 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?"); } } Zitieren
Dragon8 Geschrieben 6. Dezember 2009 Geschrieben 6. Dezember 2009 Ich habe jetzt nur einmal flüchtig drüber geschaut, aber als erstes fällt mir auf, dass du einige Variablen bei der Prüfung der nächsten ISBN nicht wieder auf ihren Startstand zurück setzt. Vor allem deine Variablen "einser" und "dreier" rechnen bei der 2. Prüfungen mit den Werten der 1. Prüfung weiter. Zitieren
JustinCredible Geschrieben 6. Dezember 2009 Autor Geschrieben 6. Dezember 2009 Stimmt, das war es...das gleiche galt auch für pruefsumme und -zahl, habe die jetzt einfach in die erste for-Schleife gesetzt. Vielen Dank! Kann mir jetzt noch einer sagen, wie ich überprüfen kann, ob ein String zB Buchstaben [a-zA-Z] enthält? Bei mir hat es bis jetzt irgendwie nur mit einzelnen Buchstaben geklappt...aber nicht von a-z :?: Zitieren
Dragon8 Geschrieben 6. Dezember 2009 Geschrieben 6. Dezember 2009 Die Methode String#matches(regex) bietet die Möglichkeit den String gegen ein RegEx zu vergleichen und gibt true zurück wenn der String dem Ausdruck entspricht, und false falls nicht. Damit liese sich das kontrollieren. Zitieren
JustinCredible Geschrieben 6. Dezember 2009 Autor Geschrieben 6. Dezember 2009 Hab's damit hinbekommen...danke schön! Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.