ISBN Nummer prüfen

Luke22

Mitglied
Hallo Leute!

Ich bin Studienanfänger, hatte vorher also noch nie mit JAVA zu tun und habe folgende Aufgabe bekommen.

Die Internationale Standardbuchnummer (englisch: International Standard Book Number, ISBN) ist eine Nummer zur
eindeutigen Kennzeichnung von Büchern und anderen selbständigen Veröffentlichungen mit redaktionellem Anteil, wie
beispielsweise Multimedia-Produkten und Software. Es existieren dazu verschiedene Varianten, e.g. ISBN-10 und ISBN-
13. Hier wollen wir uns auf ISBN-10 beschränken.
Zu Sicherungs- und Kontrollzwecken von ISBNs wird die letzte Stelle als Prüfziffer verwendet. Diese Prüfziffer der ISBN
wird nach einfachen Regeln aus den übrigen Ziffern berechnet:
Man multipliziere die erste Ziffer mit eins, die zweite mit zwei, die dritte mit drei und so fort bis zur neunten Ziffer, die mit
neun multipliziert wird. Man addiere die Produkte und teile die Summe ganzzahlig mit Rest durch 11. Der Divisionsrest ist
die Prüfziffer. Falls der Rest 10 beträgt, ist die Prüf-"ziffer" ein "X".
Beispiel einer ISBN-Prüfziffer:
ISBN 3898641171 ("Sprechen Sie Java?")
3*1 + 8*2 + 9*3 + 8*4 + 6*5 + 4*6 + 1*7 + 1*8 + 7*9 =
3 + 16 + 27 + 32 + 30 + 24 + 7 + 8 + 63 = 210
210 / 11 = 19 Rest: 1 => Prüfziffer korrekt!
Schreiben Sie ein Programm, das eine ISBN einliest und prüft ob diese formal korrekt ist, d.h. ob die Prüfziffernrechnung
korrekt ist. Verwenden Sie zum Einlesen der ISBN die Methode In.read().

Meine Fragen dazu sind:
Wie kann ich, wenn die ISBN als eine eingelesen wird, die einzelnen Stellen mit der jeweiligen Zahl (1-9) multiplizieren?
Wie kann ich die Länge der ISBN überprüfen?

Danke im voraus!
 

SchwarzWeiß

Bekanntes Mitglied
Also mit Modulo kommst du an die einzelnen Ziffern einer Zahl.
Bekommst du die Zahl als Integer oder als String in der Form "ISBN 3898641171 ("Sprechen Sie Java?")" ? Falls du den String bekommst, musst du die Zahl natürlich zuerst herausschneiden.
 

Luke22

Mitglied
Also, das habe ich jetzt aus einer anderen Aufgabe (Mastermind):
int zZ4 = zahl % 10;
int zZ3 = (zahl/10) % 10;
int zZ2 = (zahl/100) % 100;
int zZ1 = (zahl/1000) % 1000;

nur das eben mit den 9 Stellen?
lg
 

Luke22

Mitglied
Die Sache ist die, dass ich die ISBN als char eingeben muss da die 10. Stelle kann auch ein X sein.
Deswegen geht das mit Modulo nicht oder täusch ich mich??
 

SchwarzWeiß

Bekanntes Mitglied
Schreiben Sie ein Programm, das eine ISBN einliest und prüft ob diese formal korrekt ist, d.h. ob die Prüfziffernrechnung
korrekt ist.
Also für mich hört sich das so an, als würde das Programm die korrekte Schreibweise (=zehn Ziffern) erwarten und nur die Korrektheit bzgl. der Ziffern muss überprüft werden.
Falls die Schreibweise auch falsch sein kann, würde ich eine syntaktische Überprüfung vorher machen und wenn alles passt zu einem Integer konvertieren und dann eben wie gesagt das mit der Modulorechnung.
 

Luke22

Mitglied
Das sind die Beispiele die gegeben sind, sorry habe ich vorher vergessen:

ISBN-Prüfung
============
ISBN: 3898641171
ISBN ist korrekt!
...
ISBN: 389864117X
ISBN ist nicht korrekt!
...
ISBN: 12345678901
Keine gueltige ISBN!

Es soll also die Anzahl der Stellen überprüft werden (ob sie 10 sind oder nicht), falls diese zu viele sind heißt es "Keine gueltige ISBN". Das ist also die erste Abfrage.
Dann soll die letzte Stelle berechnet werden ob diese korrekt ist oder nicht.
Die ISBN soll aber eben als Eine eingegeben werden, also kann auch ein X an letzter Stelle stehen.
Mit einem möglichen X kann die ISBN aber kein int sein, muss doch ein char sein?
Deswegen steh ich da gerade an.
Das ich die 10. Stelle auf Richtigkeit mit den ersten 9 Stellen überprüfe ist mir klar.
Eben das ist mein Problem:
Wie grenze ich also die ersten 9 Stellen ab um die 10. zu berechnen?
Und wie überprüfe ich die Anzahl der gesamten Stellen der ISBN?
 

SchwarzWeiß

Bekanntes Mitglied
Ein char ist ein einzelnes Zeichen, du meinst ein String. Mit der Methode substring() von String kannst du schon mal das ISBN wegstreichen, dann könntest du versuchen mit Integer.parseInt() den String zu konvertieren (in einem try-catch-Block). Im try-Block machst du weiter, wenn es funktioniert, im catch-Block gibst du die Meldung aus, dass die ISBN nicht korrekt ist.
 

Neue Themen


Oben