ISBN

derHulki

Mitglied
Schreiben sie eine Methode, die zu einer 9stellingen Zahl die passsende Prüfziffer generiert, sodass eine 10-stellige ISBN-Nummer ensteht.

Beispiel: Gegebn ist die Zahl 312734371

= (1·3 + 2·1 + 3·2 + 4·7 + 5·3 + 6·4 + 7·3 + 8·7 + 9·1) mod 11 = 10
Bei 10 soll ein X zurückgegeben werden, ansonsten der Wert.

Hier mein Code, irgendwie kommt immer 0 raus.

Java:
public class Ue8auf1 {
public String calculatreISBNCheckDigit(long n ){
    
    long q = 0;
    String s = "";
    for(int i=9; i>=0;i--){
        q =  n%10;
        q= q*i  ;
    } q = q%11;
    if(q == 10){
        return "X";
    }else {
        return String.valueOf(q);
    }
    }
    

public static void main(String[]args){
    Ue8auf1 a = new Ue8auf1();
    System.out.println(a.calculatreISBNCheckDigit(312734371));
}
}

mfg
 
Zuletzt bearbeitet von einem Moderator:

derHulki

Mitglied
Ok ich denke ich habs:

[Java]
public class Ue8auf1 {
public String calculatreISBNCheckDigit(long n ){
if(n < 100000000 || n > 999999999){
return null;
}
long n1 = n;
int q = 0;
int erg = 0;
for(int i=9; i>0;i--){
q = (int) n%10;
q = q*i;
erg += q;
n /=10;
} erg = erg%11;
if(erg == 10){
return String.valueOf(n1) + "X";
}else {
return String.valueOf(n1)+ String.valueOf(erg);
}
}


public static void main(String[]args){
Ue8auf1 a = new Ue8auf1();
System.out.println(a.calculatreISBNCheckDigit(312734371));
}
}
[/code]

Gibt es noch Verbesserungsvorschläge?




Es wäre für dich leichter die Aufgabe mit einem Array zu lösen

Wie würde den die Lösung mit einem Array aussehen?

mfg
 

Flown

Administrator
Mitarbeiter
Verbesserungsvorschläge sind eigentlich nicht da, außer das man den Code ein wenig verkürzen kann:
Java:
private static String isbnCheck(int nr) {
  int checkDigit = 0;
  for (int i = 9, n = nr; i > 0; i--, n /= 10) {
    checkDigit += i * (n % 10);
  }
  checkDigit %= 11;
  return String.valueOf(nr) + (checkDigit == 10 ? "X" : String.valueOf(checkDigit));
}
 

Robinson97

Aktives Mitglied
Wie würde den die Lösung mit einem Array aussehen?

mfg

Also ich hatte das so gemacht:

Java:
    int zaehler2 = 10, ergebnis=0, pruefziffer=0;
        int [] isbn = new int[9];
        Scanner sc1 = new Scanner(System.in);
        for(int i=0;i<9;i++)
        {
            System.out.println("Die "+(i+1)+". Zahl: ");
            isbn[i]= sc1.nextInt();
        }
        for(int i=0;i<9;i++)
        {
            ergebnis=ergebnis+isbn[i]*zaehler2;
            zaehler2--;
        }
        pruefziffer=11-ergebnis%11;
        if(pruefziffer == 10){
            System.out.print("Die Prüfziffer ist X");
        }
        else{
         System.out.print("Prüfziffer: "+pruefziffer);
         }

Mir war es leichter gefallen es mit arrays zu machen
 

Neue Themen


Oben