ISBN Prüfziffer berechnen

fluxinello

Mitglied
Hi,
Ich soll von einer ISBN Nummer die Prüfziffer, also die letzte Zahl berechnen.
In der Aufgabenstellung steht auch wie man sie berechnet:
10 = (∑ ∙ 9 =1 ) 11 = (1 ∙ 1 + 2 ∙ 2 + ⋯ + 9 ∙ 9 ) 11

Jetzt soll ich das ganze zusätzlich in einer Klasse machen zum testen via Schnittstelle.

Da ich euch aber nicht wieder nach der verdammten Lösung fragen will, würde ich gerne wissen in wiefern ich mir das ganze klarer machen kann also anhand von Tutorials oder Videos.
Denn ich habe einfach keinen Ansatz wie ich das ganze angehen kann und das wiederholen der letzten Vorlesungen hilft mir ehrlich gesagt nicht so gut weiter.

Kennt jemand eventuell einen guten Java Youtube Kanal wo alles gut erklärt wird oder hat andere Wege wie ich besser verstehe solche Aufgaben anzugehen?
 
Zwar kein Video oä, aber vllt kann man ja einen Ansatz erarbeiten 😉

Wie würdest du denn von "1 23123 123" Schritt für Schritt per Hand die Prüfziffer berechnen?
 
1*2 + 2*2 + 3*3 + 1*4 + 2*5 + 3*6 + 1*7 + 2*8 + 3*9 = Ergebnis mod 11
Aber ich komme trotzdem nicht drauf.
Mir ist klar, dass ich wohl die ISBN Zahlen alle mit einer Zahl, immer +1 aufsteigend multiplizieren muss, wie oben eben. Und dann das Ergebnis also die Summe modulo 11, wahrscheinlich in einer Schleife?
 
Hallo fluxinello,

du musst für deine Aufgabe zwei Probleme lösen:
1. Berechnung der Prüfziffer,
2. eine eigene Klasse schreiben und die Berechnung testen.
Obwohl es in diesem Forum nicht gerne gesehen ist, wenn fertige Lösungen präsentiert werden, schenke ich dir den zweiten Teil der Aufgabe. Ich gehe in meiner Lösung davon aus, dass dir die ersten 9 Ziffern als int[] vorliegen (das ist die einfachste Version und du hast uns darüber keine Informationen gegeben). Sollten sie jedoch als String (mit Leerzeichen oder Bindestrichen) oder als long vorliegen, ist weitere Arbeit notwendig.
Die Berechnung der Prüfziffer musst du dann selber erledigen. Wenn dabei konkrete Probleme auftreten, kannst du natürlich gerne fragen (am liebsten mit dem bisherigen Code, den du erstellt hast).
Java:
public class Isbn {

    public static int berechnePruefziffer(int[] ziffern) {
        int pruefziffer = -999;
        // berechne pruefziffer
        return pruefziffer;
    }

    public static void main(String[] args) {
        int[] testarray = {1, 2, 3, 1, 2, 3 ,1, 2, 3};
        int pruefziffer = berechnePruefziffer(testarray);
        System.out.println(pruefziffer);
    }
}

Gruß
Fritz
 
Schleife ist schon mal der richtige Weg 😉
Was müsste da denn in einer Schleife laufen?
Ich hätte eventuell 2 Schleifen gemacht, in der ersten Schleife werden alle 9 Zahlen abgefragt.
In der zweiten Schleife werden dann die eingegebenen Zahlen mit den entsprechenden Zahlen von 1-9 multipliziert.
Dann eventuell ein Assert, welches festsetzt, dass wenn 10 als Prüfziffer rauskommt, es als X dargestellt wird (teil der aufgabenstellung die ich nicht erwähnt habe).
Habe außerdem noch nicht ganz verstanden, was ein- und auslesen bedeutet.

Meine grobe Vermutung wäre einfach mal, dass ich meiner Klasse eine Zahl oder etwas ähnliches mitteile, die dann innerhalb oder außerhalb der Klasse (z.B. von ner anderen Klasse) verarbeitet wird.
Auslesen würde ich sagen, wäre dass wenn ich ne Eingabe mache bei z.B. Wie ist dein Name? ich mit "Anton" antworte, und er dieses "Anton" dann quasi ausgibt.

@fritz: Ich danke dir, aber wie schon gesagt, mich pisst es selber an, dass ich nichts gebacken bekomme. Daher will ichs lieber ohne Ergebnis lösen, und lieber mit Erklärungen was ich machen muss z.B.
 
Ich hätte eventuell 2 Schleifen gemacht, in der ersten Schleife werden alle 9 Zahlen abgefragt.
Meinst du zum einlesen der Zahlen? Wenn ja, lass das erstmal außen vor, das ganze soll ja über eine Schnittstelle passieren. Deine Funktion zum Berechnen erwartete einfach nur die ISBN in einem dir passenden Format (sein es String, Array, Liste, etc), wo das herkommt kann dir egal sein.

In der zweiten Schleife werden dann die eingegebenen Zahlen mit den entsprechenden Zahlen von 1-9 multipliziert.
Das klingt richtig 😉
Dann eventuell ein Assert, welches festsetzt, dass wenn 10 als Prüfziffer rauskommt, es als X dargestellt wird (teil der aufgabenstellung die ich nicht erwähnt habe).
Das klingt auch passend 😉

Meine grobe Vermutung wäre einfach mal, dass ich meiner Klasse eine Zahl oder etwas ähnliches mitteile, die dann innerhalb oder außerhalb der Klasse (z.B. von ner anderen Klasse) verarbeitet wird.
Jein, erstmal brauchst du nur eine Klasse mit der Funktion zum berechnen.

Habe außerdem noch nicht ganz verstanden, was ein- und auslesen bedeutet.
Auslesen würde ich sagen, wäre dass wenn ich ne Eingabe mache bei z.B. Wie ist dein Name? ich mit "Anton" antworte, und er dieses "Anton" dann quasi ausgibt.

Ist Einlesen/Ausgeben Teil der Aufgabenstellung? Wenn ja, verschieb es auf später 😉
Wenn nein, dann ist's ja egal 😉
 
Ok danke dir schonmal.
Ich hab mich jetzt mal in das Thema Arrays und Schleifen eingelesen und habe jetzt mal selbstständig ohne copy & paste oder ablesen nen kleinen Code geschrieben der NUR die Funktion umfasst, die Pruefziffer zu berechnen. Dass ich die Funktion über das Interface bzw. der Schnittstelle aufrufe werde ich noch machen wenn die Funktion in Ordnung ist.

Java:
  public static long buildIsbn(long i) {
      long ergebnis;
      long pruefziffer;
  long[]isbnArray = {1,2,3,4,5,6,7,8,9};
  for(long i=1; i<=9, i++) {
  if (i * zahl1 +
      i * zahl2 +
      i * zahl3 +
      i * zahl4 +
      i * zahl5 +
      i * zahl6 +
      i * zahl7 +
      i * zahl8 +
      i * zahl9)
      ergebnis = i * zahl1 + i * zahl2 + i * zahl3 + i * zahl4 + i * zahl5 + i * zahl6 + i * zahl 7 + i * zahl8 + i * zahl9);
      pruefziffer = ergebnis % 11;
      return pruefziffer;
    }
}

Hoffe auf Verbesserungsvorschläge von denen ich was lernen kann! 😛
Danke schonmal im Vorraus!
Achja, bitte geht nicht zu hart mit mir um, stehe noch ganz am Anfang 😀
 
Was soll denn der Parameter long i sein?

Und was das long[]isbnArray?

Und was sind zahl1-zahl9, die fallen da vom Himmel...

Und was willst du mit dem if (...) testen?
 
das long i sollten eigtl die Zahlen 1-9 im Array sein und das zweite ein Array mit den Zahlen von 1-9 welche man mit den 9 eingegebenen Zahlen multipliziert.
Zahl1 - zahl9 sind die zahlen die man später eingbit, welche mit den zahlen aus dem array multipliziert werden.

ja das mit dem if ist quatsch merke ich auch gerade 😀
 
das long i sollten eigtl die Zahlen 1-9 im Array sein und das zweite ein Array mit den Zahlen von 1-9 welche man mit den 9 eingegebenen Zahlen multipliziert.
Du hast dann 3 mal die Zahlen 1-9, einmal in i, in isbnArray und in dem for-loop

Deine Rechnung im for-Loop wird jetzt auch 9 mal ausgeführt 😉

Zahl1 - zahl9 sind die zahlen die man später eingbit, welche mit den zahlen aus dem array multipliziert werden.
Eingelesen werden müssen keine Zahlen, zumindest nicht in der Funktion, die eingelesen Werte werden der Funktion als Parameter übergeben 😉
 
Java:
public static long buildIsbn(long i) {
      long ergebnis;
      long pruefziffer;
      long[]i = {1,2,3,4,5,6,7,8,9};
      for(long i=1; i <=9, i++) {
      ergebnis = i * zahl1 + i * zahl2 + i * zahl3 + i * zahl4 + i * zahl5 + i * zahl6 + i * zahl 7 + i * zahl8 + i * zahl9);
      pruefziffer = ergebnis % 11;
      return pruefziffer;
    }
So besser?
 
Naja, deine zahl1-zahl9 fallen immer noch vom Himmel, dein i ist drei mal definiert (einmal als array, zweimal als long), und deine Rechnung wird immer noch 9 mal ausgeführt 😉


Um das mal andersrum zu versuchen, was wäre denn ein Sinnvoller Parameter für eine Funktion berechnePruefziffer?
 
long ergebnis?
naja ich weiß nicht wie ich die zahlen 1-9 deifinieren soll? Gibt doch bestimmt ne andere Möglichkeit als 9x long zahl1 usw zu schreiben.
weiß nicht ganz was ich anders machen soll damit es wenigstens formal richtig ist und i nicht 3x definiert ist 😀
 
Moin,

...deine Rechnung wird immer noch 9 mal ausgeführt 😉
na, das nun nicht gerade 😛
Es dürfte wegen der öffnenden Klammer hinter dem Kopf der for-Schleife gar nicht erst compilieren ....

public static long buildIsbn(long i) {
long ergebnis;
long pruefziffer;
long[]i = {1,2,3,4,5,6,7,8,9};
for(long i=1; i <=9, i++) { // !!!
ergebnis = i * zahl1 + i * zahl2 + i * zahl3 + i * zahl4 + i * zahl5 + i * zahl6 + i * zahl 7 + i * zahl8 + i * zahl9);
pruefziffer = ergebnis % 11;
return pruefziffer;
}

Gruß Klaus
 

Zurück
Oben