Hi
ich habe zwei Fragen :
ISBN-Prüfung
Eine International Standard Book Number (ISBN) dient der eindeutigen Identifizierung von Büchern. Mittlerweile sind die ISBN-13 Standard; Beispiele hierfür sind:
* ISBN 978-0-19-861425-8
* ISBN 978-3-8297-1551-5
Eine detaillierte Erklärung des ISBN-Begriffes findet sich unter anderem unter ISBN 13 - Handbuch.
Streicht man aus einer ISBN-Angabe das am Anfang stehende "ISBN" und die zur Blockbildung verwendeten Minus- oder Leerzeichen, so bleiben 13 Zeichen erhalten. Jedes dieser 13 Zeichen kann eine Ziffer von 0 bis 9 sein. Dabei ist die letzte Ziffer, also die 13. Stelle, die sogenannte Prüfziffer.
Die Prüfziffer berechnet sich aus den ersten 12 Stellen, wie folgt: alle 12 Ziffern werden zu einem Zwischenergebnis (ZwErg1) addiert, wobei jede zweite Ziffer (also die Ziffern an 2., 4., 6., usw. Stelle) zunächst mit 3 multipliziert wird. Anschließend wird die letzte Ziffer von ZwErg1 von 10 abgezogen und % 10 (Modulo 10) gerechnet und ergibt die Prüfziffer, also die 13. Stelle der ISBN.
Umgekehrt ergibt sich für die Gültigkeitsprüfung einer vorgegebenen ISBN folgendes: seien nun z1, z2...z13 die 1., 2...13. Ziffer der ISBN. Falls die Berechnung:
(z1 + z3 + z5 + z7 + z9 + z11 + z13 + 3*(z2 + z4 + z6 + z8 + z10 + z12)) % 10
0 ergibt, handelt es sich um eine gütige ISBN-13 Nummer.
ReturnCode.java
Implementieren Sie die öffentliche Enum ReturnCode im Paket jpp.isbn mit folgenden Werten:
*
VALID
*
INVALID_LENGTH
*
INVALID_PREFIX
*
INVALID_DELIMITER
*
INVALID_CHARACTER
*
INVALID_CHECKSUM
ISBNInvestigator.java
Implementieren Sie die öffentliche Klasse ISBNInvestigator im Paket jpp.isbn. Diese Klasse soll eine gegebene ISBN-13 Nummer auf ihre Richtigkeit und Gültigkeit überprüfen. Folgende Schnittstelle soll mindestens bereitgestellt werden:
*
public static ReturnCode checkISBN(String isbn) throws NullPointerException
Diese Funktion überprüft, ob es sich bei dem übergebenen String isbn um eine gültige ISBN-13 Nummer handelt. Wurde ein gültig formatierter ISBN-Eingabestring übergeben, so soll die Methode den Enum-Wert VALID zurückliefern, andernfalls sind folgenden Werte in der angegebenen Priorität zurück liefern:
o
INVALID_LENGTH
Die Länge des Strings entspricht keiner gültigen ISBN-13 Nummer
o
INVALID_PREFIX
Eine gültige ISBN kann mit dem Präfix ISBN gefolgt von einem Leerzeichen beginnen, muss es aber nicht. Falls das Präfix fehlt, beginnt eine gültige Eingabe direkt mit der 1. Ziffer der ISBN, also ohne vorangehende Leerzeichen. Wurde ein Präfix angegeben und dieser entspricht nicht "ISBN " so wird INVALID_PREFIX zurückgeliefert.
o
INVALID_DELIMITER
ISBN Nummern können Blocktrennzeichen besitzen. Gültige Blocktrennzeichen sind das Minus- oder das Leerzeichen. Gültige ISBN Nummern besitzen 4 Blocktrennzeichen und müssen einheitlich sein, d.h. entweder nur Minus- oder nur Leerzeichen. Das Leerzeichen zwischen ISBN-Präfix (falls vorhanden) und der Ziffernfolge gilt dabei NICHT als Blocktrennzeichen. Wird eine ISBN mit Blocktrennzeichen formatiert, so ist der erste Zahlenblock auf die Länge 3 sowie der letzte Zahlenblock auf die Länge 1 festgelegt. Die anderen Blöcke müssen jeweils mindestens ein Zeichen enthalten. Allerdings kann eine ISBN auch einfach nur als Folge ihrer 13 Ziffern ohne Blocktrennzeichen angegeben werden. Entspricht die Anzahl der Blocktrennzeichen nicht der geforderten Anzahl oder ist die Länge eines Blockes falsch, so wird INVALID_DELIMITER zurückgeliefert.
o
INVALID_CHARACTER
Der String enthält ungültige Zeichen.
o
INVALID_CHECKSUM
Der String enthält eine ungültige Prüfsumme.
Ist der übergebene String jedoch null so wird eine NullPointerException geworfen.
*
public static void main(String[] args)
Nach der Aufforderung "Please insert ISBN:" zur Eingabe einer ISBN Nummer wird ein String über die Kommandozeile eingelesen. Kommandozeile bedeutet hierbei einlesen mittels Scanner von System.in. Auf das gelesene Argument wird dann die Methode checkISBN angewandt. Das Ergebnis der Überprüfung soll entsprechend dem Rückgabewert der Methode checkISBN wie folgt über die Kommandozeile ausgegeben werden:
o VALID: "valid"
o INVALID_LENGTH: "invalid length"
o INVALID_PREFIX: "invalid prefix"
o INVALID_DELIMITER: "invalid delimiter"
o INVALID_CHARACTER: "invalid character"
o INVALID_CHECKSUM: "invalid checksum"
Eingabeaufforderung und ISBN Prüfung laufen solange, bis das Programm durch Eingabe von "exit" beendet wird. Beachten Sie bei ihrer Ausgabe, dass Sie jeweils nur die oben angegebenen Meldungen ohne führende oder abschließende Leerzeichen gefolgt von einem Zeilenumbruch auf der Konsole ausgeben.
Sie können die Funktionalität Ihres Programms mit folgenden ISBN Nummern überprüfen:
Beispiele für gültige ISBN-Nummern:
* ISBN 978 0 321 52565 9
* 978-3-89721-477-4
* ISBN 9783897214774
* 9783897214774
Beispiele für ungültige ISBN-Nummern:
* ISBN 979-3-89721-497-4
* ISBN 111 1 11211 111 4
Verläuft die Prüfung dieser Nummern korrekt ist dies ein guter Hinweis auf die korrekte Funktionalität Ihres Programms. Überlegen Sie sich weitere Test-Fälle von gültigen und ungültigen ISBN-Nummern um Ihr Programm zu testen.
mien Code lautet
public static ReturnCode checkISBN(String isbn) throws NullPointerException{
String baa00 = isbn.trim();
String baa01 = baa00.replace(" ", "");
String baa02 = baa01.replace("-", "");
String baa03 = baa02.replace("ISBN", "");
if (baa03.length() !=13 ){
return ReturnCode.INVALID_LENGTH;
}
if (!((baa02.charAt(0) == 'I' && baa02.charAt(1) == 'S' &&
baa02.charAt(2) == 'B' && baa02.charAt(3) == 'N' )||
baa02.charAt(0)== '0' || baa02.charAt(0)== '1' ||
baa02.charAt(0)== '2' || baa02.charAt(0)== '3' ||
baa02.charAt(0)== '4' || baa02.charAt(0)== '5' ||
baa02.charAt(0)== '6' || baa02.charAt(0)== '7' ||
baa02.charAt(0)== '8' || baa02.charAt(0)== '9' )){
return ReturnCode.INVALID_PREFIX;
}
if (! isbn.matches("(ISBN)? ?[a-zA-Z0-9]{3}(-)[a-zA-Z0-9]{1,7}(-)[a-zA-Z0-9]{1,7}(-)[a-zA-Z0-9]{1,7}(-)[a-zA-Z0-9]{1}") &&
! isbn.matches("(ISBN)? ?[a-zA-Z0-9]{3} [a-zA-Z0-9]{1,7} [a-zA-Z0-9]{1,7} [a-zA-Z0-9]{1,7} [a-zA-Z0-9]{1}")&&
! isbn.matches("(ISBN)? ?[a-zA-Z0-9]{3}[a-zA-Z0-9]{1,7}[a-zA-Z0-9]{1,7}[a-zA-Z0-9]{1,7}[a-zA-Z0-9]{1}")){
return ReturnCode.INVALID_DELIMITER;
}
if ( !isbn.matches("(ISBN)? [0-9]{3}(-)[0-9]{1,7}(-)[0-9]{1,7}(-)[0-9]{1,7}(-)[0-9]{1}"))
return ReturnCode.INVALID_CHARACTER;
String a = baa03.substring(0, 1);
String b = baa03.substring(1, 2);
String c = baa03.substring(2, 3);
String d = baa03.substring(3, 4);
String e = baa03.substring(4, 5);
String f = baa03.substring(5, 6);
String g = baa03.substring(6, 7);
String h = baa03.substring(7, 8);
String i = baa03.substring(8, 9);
String j = baa03.substring(9, 10);
String k = baa03.substring(10, 11);
String l = baa03.substring(11, 12);
String m = baa03.substring(12, 13);
int zahl01 = Integer.valueOf(a).intValue();
int zahl02 = Integer.valueOf(b).intValue();
int zahl03 = Integer.valueOf(c).intValue();
int zahl04 = Integer.valueOf(d).intValue();
int zahl05 = Integer.valueOf(e).intValue();
int zahl06 = Integer.valueOf(f).intValue();
int zahl07 = Integer.valueOf(g).intValue();
int zahl08 = Integer.valueOf(h).intValue();
int zahl09 = Integer.valueOf(i).intValue();
int zahl10 = Integer.valueOf(j).intValue();
int zahl11 = Integer.valueOf(k).intValue();
int zahl12 = Integer.valueOf(l).intValue();
int zahl13 = Integer.valueOf(m).intValue();
int z = zahl01+3*zahl02+zahl03+3*zahl04+zahl05+3*zahl06+zahl07+3*zahl08+zahl09+3*zahl10+zahl11+3*zahl12;
if ( !(10 - 10% (z) == zahl13))
return ReturnCode.INVALID_CHECKSUM;
return ReturnCode.VALID;
}
Die Fragen :
1. was bedeutet :NullPointerException??
wozu brauche ich das und wie soll ich das benutzen
2. ich habe INVALID nicht benutzt und ich weiß eigenlich nicht wo ich das benutzen soll
ist nicht in der Aufgabe zu sehen ??
Vielen Dank
ich habe zwei Fragen :
ISBN-Prüfung
Eine International Standard Book Number (ISBN) dient der eindeutigen Identifizierung von Büchern. Mittlerweile sind die ISBN-13 Standard; Beispiele hierfür sind:
* ISBN 978-0-19-861425-8
* ISBN 978-3-8297-1551-5
Eine detaillierte Erklärung des ISBN-Begriffes findet sich unter anderem unter ISBN 13 - Handbuch.
Streicht man aus einer ISBN-Angabe das am Anfang stehende "ISBN" und die zur Blockbildung verwendeten Minus- oder Leerzeichen, so bleiben 13 Zeichen erhalten. Jedes dieser 13 Zeichen kann eine Ziffer von 0 bis 9 sein. Dabei ist die letzte Ziffer, also die 13. Stelle, die sogenannte Prüfziffer.
Die Prüfziffer berechnet sich aus den ersten 12 Stellen, wie folgt: alle 12 Ziffern werden zu einem Zwischenergebnis (ZwErg1) addiert, wobei jede zweite Ziffer (also die Ziffern an 2., 4., 6., usw. Stelle) zunächst mit 3 multipliziert wird. Anschließend wird die letzte Ziffer von ZwErg1 von 10 abgezogen und % 10 (Modulo 10) gerechnet und ergibt die Prüfziffer, also die 13. Stelle der ISBN.
Umgekehrt ergibt sich für die Gültigkeitsprüfung einer vorgegebenen ISBN folgendes: seien nun z1, z2...z13 die 1., 2...13. Ziffer der ISBN. Falls die Berechnung:
(z1 + z3 + z5 + z7 + z9 + z11 + z13 + 3*(z2 + z4 + z6 + z8 + z10 + z12)) % 10
0 ergibt, handelt es sich um eine gütige ISBN-13 Nummer.
ReturnCode.java
Implementieren Sie die öffentliche Enum ReturnCode im Paket jpp.isbn mit folgenden Werten:
*
VALID
*
INVALID_LENGTH
*
INVALID_PREFIX
*
INVALID_DELIMITER
*
INVALID_CHARACTER
*
INVALID_CHECKSUM
ISBNInvestigator.java
Implementieren Sie die öffentliche Klasse ISBNInvestigator im Paket jpp.isbn. Diese Klasse soll eine gegebene ISBN-13 Nummer auf ihre Richtigkeit und Gültigkeit überprüfen. Folgende Schnittstelle soll mindestens bereitgestellt werden:
*
public static ReturnCode checkISBN(String isbn) throws NullPointerException
Diese Funktion überprüft, ob es sich bei dem übergebenen String isbn um eine gültige ISBN-13 Nummer handelt. Wurde ein gültig formatierter ISBN-Eingabestring übergeben, so soll die Methode den Enum-Wert VALID zurückliefern, andernfalls sind folgenden Werte in der angegebenen Priorität zurück liefern:
o
INVALID_LENGTH
Die Länge des Strings entspricht keiner gültigen ISBN-13 Nummer
o
INVALID_PREFIX
Eine gültige ISBN kann mit dem Präfix ISBN gefolgt von einem Leerzeichen beginnen, muss es aber nicht. Falls das Präfix fehlt, beginnt eine gültige Eingabe direkt mit der 1. Ziffer der ISBN, also ohne vorangehende Leerzeichen. Wurde ein Präfix angegeben und dieser entspricht nicht "ISBN " so wird INVALID_PREFIX zurückgeliefert.
o
INVALID_DELIMITER
ISBN Nummern können Blocktrennzeichen besitzen. Gültige Blocktrennzeichen sind das Minus- oder das Leerzeichen. Gültige ISBN Nummern besitzen 4 Blocktrennzeichen und müssen einheitlich sein, d.h. entweder nur Minus- oder nur Leerzeichen. Das Leerzeichen zwischen ISBN-Präfix (falls vorhanden) und der Ziffernfolge gilt dabei NICHT als Blocktrennzeichen. Wird eine ISBN mit Blocktrennzeichen formatiert, so ist der erste Zahlenblock auf die Länge 3 sowie der letzte Zahlenblock auf die Länge 1 festgelegt. Die anderen Blöcke müssen jeweils mindestens ein Zeichen enthalten. Allerdings kann eine ISBN auch einfach nur als Folge ihrer 13 Ziffern ohne Blocktrennzeichen angegeben werden. Entspricht die Anzahl der Blocktrennzeichen nicht der geforderten Anzahl oder ist die Länge eines Blockes falsch, so wird INVALID_DELIMITER zurückgeliefert.
o
INVALID_CHARACTER
Der String enthält ungültige Zeichen.
o
INVALID_CHECKSUM
Der String enthält eine ungültige Prüfsumme.
Ist der übergebene String jedoch null so wird eine NullPointerException geworfen.
*
public static void main(String[] args)
Nach der Aufforderung "Please insert ISBN:" zur Eingabe einer ISBN Nummer wird ein String über die Kommandozeile eingelesen. Kommandozeile bedeutet hierbei einlesen mittels Scanner von System.in. Auf das gelesene Argument wird dann die Methode checkISBN angewandt. Das Ergebnis der Überprüfung soll entsprechend dem Rückgabewert der Methode checkISBN wie folgt über die Kommandozeile ausgegeben werden:
o VALID: "valid"
o INVALID_LENGTH: "invalid length"
o INVALID_PREFIX: "invalid prefix"
o INVALID_DELIMITER: "invalid delimiter"
o INVALID_CHARACTER: "invalid character"
o INVALID_CHECKSUM: "invalid checksum"
Eingabeaufforderung und ISBN Prüfung laufen solange, bis das Programm durch Eingabe von "exit" beendet wird. Beachten Sie bei ihrer Ausgabe, dass Sie jeweils nur die oben angegebenen Meldungen ohne führende oder abschließende Leerzeichen gefolgt von einem Zeilenumbruch auf der Konsole ausgeben.
Sie können die Funktionalität Ihres Programms mit folgenden ISBN Nummern überprüfen:
Beispiele für gültige ISBN-Nummern:
* ISBN 978 0 321 52565 9
* 978-3-89721-477-4
* ISBN 9783897214774
* 9783897214774
Beispiele für ungültige ISBN-Nummern:
* ISBN 979-3-89721-497-4
* ISBN 111 1 11211 111 4
Verläuft die Prüfung dieser Nummern korrekt ist dies ein guter Hinweis auf die korrekte Funktionalität Ihres Programms. Überlegen Sie sich weitere Test-Fälle von gültigen und ungültigen ISBN-Nummern um Ihr Programm zu testen.
mien Code lautet
public static ReturnCode checkISBN(String isbn) throws NullPointerException{
String baa00 = isbn.trim();
String baa01 = baa00.replace(" ", "");
String baa02 = baa01.replace("-", "");
String baa03 = baa02.replace("ISBN", "");
if (baa03.length() !=13 ){
return ReturnCode.INVALID_LENGTH;
}
if (!((baa02.charAt(0) == 'I' && baa02.charAt(1) == 'S' &&
baa02.charAt(2) == 'B' && baa02.charAt(3) == 'N' )||
baa02.charAt(0)== '0' || baa02.charAt(0)== '1' ||
baa02.charAt(0)== '2' || baa02.charAt(0)== '3' ||
baa02.charAt(0)== '4' || baa02.charAt(0)== '5' ||
baa02.charAt(0)== '6' || baa02.charAt(0)== '7' ||
baa02.charAt(0)== '8' || baa02.charAt(0)== '9' )){
return ReturnCode.INVALID_PREFIX;
}
if (! isbn.matches("(ISBN)? ?[a-zA-Z0-9]{3}(-)[a-zA-Z0-9]{1,7}(-)[a-zA-Z0-9]{1,7}(-)[a-zA-Z0-9]{1,7}(-)[a-zA-Z0-9]{1}") &&
! isbn.matches("(ISBN)? ?[a-zA-Z0-9]{3} [a-zA-Z0-9]{1,7} [a-zA-Z0-9]{1,7} [a-zA-Z0-9]{1,7} [a-zA-Z0-9]{1}")&&
! isbn.matches("(ISBN)? ?[a-zA-Z0-9]{3}[a-zA-Z0-9]{1,7}[a-zA-Z0-9]{1,7}[a-zA-Z0-9]{1,7}[a-zA-Z0-9]{1}")){
return ReturnCode.INVALID_DELIMITER;
}
if ( !isbn.matches("(ISBN)? [0-9]{3}(-)[0-9]{1,7}(-)[0-9]{1,7}(-)[0-9]{1,7}(-)[0-9]{1}"))
return ReturnCode.INVALID_CHARACTER;
String a = baa03.substring(0, 1);
String b = baa03.substring(1, 2);
String c = baa03.substring(2, 3);
String d = baa03.substring(3, 4);
String e = baa03.substring(4, 5);
String f = baa03.substring(5, 6);
String g = baa03.substring(6, 7);
String h = baa03.substring(7, 8);
String i = baa03.substring(8, 9);
String j = baa03.substring(9, 10);
String k = baa03.substring(10, 11);
String l = baa03.substring(11, 12);
String m = baa03.substring(12, 13);
int zahl01 = Integer.valueOf(a).intValue();
int zahl02 = Integer.valueOf(b).intValue();
int zahl03 = Integer.valueOf(c).intValue();
int zahl04 = Integer.valueOf(d).intValue();
int zahl05 = Integer.valueOf(e).intValue();
int zahl06 = Integer.valueOf(f).intValue();
int zahl07 = Integer.valueOf(g).intValue();
int zahl08 = Integer.valueOf(h).intValue();
int zahl09 = Integer.valueOf(i).intValue();
int zahl10 = Integer.valueOf(j).intValue();
int zahl11 = Integer.valueOf(k).intValue();
int zahl12 = Integer.valueOf(l).intValue();
int zahl13 = Integer.valueOf(m).intValue();
int z = zahl01+3*zahl02+zahl03+3*zahl04+zahl05+3*zahl06+zahl07+3*zahl08+zahl09+3*zahl10+zahl11+3*zahl12;
if ( !(10 - 10% (z) == zahl13))
return ReturnCode.INVALID_CHECKSUM;
return ReturnCode.VALID;
}
Die Fragen :
1. was bedeutet :NullPointerException??
wozu brauche ich das und wie soll ich das benutzen
2. ich habe INVALID nicht benutzt und ich weiß eigenlich nicht wo ich das benutzen soll
ist nicht in der Aufgabe zu sehen ??
Vielen Dank