ISBN Prüfziffer

fluxinello

Mitglied
Hi,
Ja, ich schon wieder.
Ich versuche immernoch die Prüfziffer der ISBN zu berechnen.
Für die, die nicht wissen, was die Prüfziffer ist:
Die 9 Zahlen einer ISBN werden von 1 aufsteigend bis 9 multipliziert.
Beispiel:
987654321
9*1, 8*2, 7*3, 6*4, 5*5 ..... bis 1*9
das Ergebnis wird dann Modulo 11 gerechnet, dann hat man die Prüfziffer.

Jetzt habe ich es so weit gemacht, dass ich immer etwas mehr als die Prüfziffer rauskriege.
Bei 123456782 wäre die Prüfziffer 2, bei mir kommt 4 raus. Weiß nicht warum:

Java:
    public static long buildIsbn(long eingabe) {
        long pruefziffer = 0;
        for (int i = 9; i >= 1; i--) {
           
            pruefziffer = pruefziffer + eingabe % 10;
            pruefziffer = (eingabe / 10) * i;
            pruefziffer = pruefziffer % 11;
        }
        return pruefziffer;
    }
 

Joose

Top Contributor
Deine Berechnung ist schaut schon falsch aus ;)
Java:
            pruefziffer = pruefziffer + eingabe % 10;
            pruefziffer = (eingabe / 10) * i;
            pruefziffer = pruefziffer % 11;
In der 1.Zeile berechnest du anhand der bisherigen pruefziffer und der Eingabe und weißt das Ergebnis der Variable pruefziffer zu.
In der 2.Zeile überschreibst du den vorher berechneten Wert einfach ohne ihn in die Rechnung mit einzubeziehen ;)
Schaut für mich schon falsch aus.
 

Meniskusschaden

Top Contributor
pruefziffer = pruefziffer + eingabe % 10;
Miteingabe%10ermittelst du die letzte Ziffer deiner Eingabe. Aber warum addierst du sie zu pruefziffer? Du müsstest sie doch erst mit dem zugehörigen Faktor multiplizieren und das Ergebnis dann zu der Zwischensumme addieren, aus der du später die Prüfziffer berechnest. Ausserdem musst du auch dafür sorgen, dass du beim nächsten Schleifendurchlauf nicht wieder die letzte Ziffer verarbeitest, sondern die vorletzte, drittletzte, etc.
pruefziffer = (eingabe / 10) * i;
Hier multiplizierst du deine Eingabe ohne die letzte Ziffer (also eine achtstellige Zahl) mit dem Faktor. Warum?
pruefziffer = pruefziffer % 11;
Die Modulo-Berechnung soll nicht für jede Ziffer gemacht werden, sondern erst zum Schluß mit der Zwischensumme. Warum machst du es bei jedem Schleifendurchlauf?

Ich würde für die Schleife zwei Hilfsvariablen (ziffer und summe) einführen und noch einmal sorgfältig über die Rechenschritte nachdenken.
 

Ähnliche Java Themen

Neue Themen


Oben