Hallo, die Aufgabenstellung sagt mir das eine gültige ISBN Nummer modulo 11 gleich 0, gültig ist. Ich soll in einer Methode diese Berechnung anstellen und dann in der Main ausgeben ob diese korrekt ist, mit true oder false.
Java:
publicclass ISBN {publicstaticvoidmain(String[] args){Scanner scan =newScanner(System.in);System.out.println("ISBN überprüfen");String nummer = scan.nextLine();
nummer = nummer.replace(" ","");
nummer = nummer.replace("-","");if(nummer.length()!=10){System.out.println("ISBN besteht aus 10 Ziffern - Erneut eingeben");
scan.nextLine();}System.out.println(istISBN(nummer));}publicstaticbooleanistISBN(String nummer){int ergebnis =1;for(int i =0; i <=10; i++){char c = nummer.charAt(i);
ergebnis +=(1+ i)* c;}int check = ergebnis %11;if(check ==0){returntrue;}else{returnfalse;}}}
So wie ich das verstanden habe müsste man also bei 3-528-05912-5, 3*1+5*2+2*3... etc rechnen. In der Schleife habe ich versucht das zu lösen, 1+i ist die Zahl mit der die Nummer multipliziert wird und mit c habe ich eigentlich doch die Nummer beginnend bei charAt(0). Danach wird das Ergebnis modulo 11 gerechnet und sollte dann die demenstprechenden boolean ausgeben. Wo liegt mein Fehler?
Hier passiert nicht das, was du glaubst. c ist nicht 0-9 sondern 48-57 .. je nach dem Welche Zahl c gerade darstellt. Hintergrund dafür ist, dass jeder Character durch eine Dezimalzahl abgebildet wird. Siehe dazu die ASCII-Tabelle.
int c =Character.getNumericValue(nummer.CharAt(i));
Witziger anderer Weg - zum Verständnis schulen: ( geht aber nur bei Sprachen wie Java, die immer unicode benutzen und wenn der Char tatsächlich eine Ziffer ist )
Du hast noch ein Fehler: die Gewichtung der Prüfungen beginnt an der ersten Stelle mit zehn, an der Zeit mit neun, an der dritten mit acht und so weiter. Deine for Schleife darf auch nur von null bis kleiner neun laufen. Die zehnte Ziffer ist nämlich die Prüfziffer. Es könnte also so aussehen:
Java:
for(int i =0; i <9; i++){char c = nummer.charAt(i);if(c <'0'|| c >'9'){System.out.println("Ungueltig! (Keine Ziffer)");return;}
ergebnis +=(10- i)*(c -'0');}
Witziger anderer Weg - zum Verständnis schulen: ( geht aber nur bei Sprachen wie Java, die immer unicode benutzen und wenn der Char tatsächlich eine Ziffer ist )
Das ist tatsächlich ein ganz cooler Weg! gut zu wissen.
Ja stimmt, ich muss von 10 runterzählen, sonst klappt das nicht. Es funktioniert jetzt auf jeden Fall, vielen Dank an alle!