(Java) Welcher Datentyp für ne IBAN?
Ich bin ein kompletter Noob bei so etwas...
Ich hab ne Aufgabenstellung wo ich in der class Bankkonto den Datentyp für das Attribut iban bestimmen muss. Da wird explizit folgendes gefragt:
"Denken Sie darüber nach, welche Datentypen sich für die IBAN und den Kontostand eignen. Wäre es z.B. sinnvoll, die Länderkennung als Zeichenkette und die restliche Ziffernfolge als ganze Zahl zu speichern?"
Man kann ja keine "primitiven" Datentypen für mehrere Buchstaben verwenden bzw. nicht für eine Zeichenkette.
Dann kommt ja nur String in Frage bei mir, aber da kann man nicht die Ländererkennung DE mit der restlichen Zahlenfolge vereinen.
Kann ich einfach zb. String DE = "00" verwenden? Obwohl ich das für jedes Land dann machen müsste
EDIT:
String name;
String vorname;
String iban;
int kontostand; // in cent
double limit;
}
das wäre mein eigener Ansatz gewesen
6 Antworten
Ich würde einen eigenen Datentyp für die IBAN erstellen und dort die Länderkennung extra kodieren.
Wenn das nicht möglich sien sollte, dann sollte ein String verwendet werden, sonst wird das am Ende unverständlich.
Wäre es z.B. sinnvoll, die Länderkennung als Zeichenkette und die restliche Ziffernfolge als ganze Zahl zu speichern?
Definitiv nicht.
Da vermutlich nicht nur IBAN deutscher Banken gespeichert werden können sollen, ist gar nicht gewährleistet, dass nach der Länderkennung nur noch Ziffern kommen, sondern es sind bei IBAN verschiedener Länder auch in diesem Teil Buchstaben möglich.
Du kannst die IBAN schon deswegen nicht als ganze Zahl speichern, weil die Zahlenfolge potenziell führende Nullen beinhalten kann. Zahlen können aber keine führenden Nullen haben. Das einzig sinnvolle ist, die IBAN als String zu speichern. Zumal Du später ja ohnehin die komplette Zeichenkette brauchst - würdest Du es getrennt speichern, müsstest Du jedes Mal konvertieren, mit Nullen auffüllen und zusammensetzen. Viel zu umständlich.
Kontostände sind Dezimalzahlen. Such Dir einen Datentyp aus.
Kannst Du so machen, aber wenn Du den Kontostand als int in Cent angibst, warum dann nicht auch das Limit?
ich hatte es auch vorher so wegen der einheitlichkeit. ich mach es wieder rückgängig danke!
Was spricht denn gegen einen String für die ganze IBAN? Man kann doch sowieso nicht sinnvoll mit den IBANs rechnen, z.B. zwei IBANs addieren.
Na ja die Aufgabenstellung hat es so gemeint dass string gar nicht sinnvoll wäre.. oder vielleicht habe ich das einfach missverstanden.
Nein, das sagt die Aufgabenstellung nicht. Im Gegenteil fragt sie, ob die Auftrennung sinnvoll wäre. Gegenargumente zur Auftrennung sind in meiner Antwort zu finden.
Beachtenswert ist auch das Argument von ohwehohach, das gegen eine Speicherung des numerischen Teils als ganze Zahl spricht.
Da die Anzahl der Ziffern einer IBAN bekannt ist, könnte man zwar theortisch die führenden Nullen rekonstruieren. Aber das will man sich wirklich nicht antun.
Dankeschön. Hab es dummerweise missinterpretiert
Für die IBAN würde ich String nehmen und für den Kontostand Float.
Für den Kontostand meinte die nette Dozentin es wäre keine gute Idee float/double zu verwenden da beim compilen die Zahlenfolge aufgerundet wird, so würde also zB. bei 2300.33€ 33ct verloren gehen weil es auf 2300€ aufgerundet wird.
class Bankkonto {
String name;
String vorname;
String iban;
int kontostand; // in cent
double limit;
}
Das mit dem Runden ist Quatsch. Erstens hat das nichts mit dem Kompilieren zu tun und zweitens ist der Sinn von float/double, etc. ja gerade, dass man mit Nachkommastellen arbeiten kann.
Manche Zahlen können aber nicht präzise durch float/double dargestellt werden - vielleicht meint sie das?
Die Speicherung in Cent simuliert halt Zahlen mit fester Anzahl Nachkommastellen. Sprich, um das später irgendwo anzuzeigen, musst Du entweder eine Float-Division durch 100.0 machen (und das dann dasselbe Problem wie wenn Du es direkt gespeichert hättest) oder Du musst eine Funktion machen, die in den String an festen Positionen dann eben das Dezimalkomma einfügt.
Dankeschön!
Würde das auch so gehen:
class Bankkonto {
String name;
String vorname;
String iban;
int kontostand; // in cent
double limit;
}