Hallo zusammen,
sitze seit Tagen an einer Aufgabe die ich nicht bewältigen kann : (
hoffe jemand von euch hat eine Idee.
erste Klasse:
Diese Klasse ist schon mal komplett richtig aber ich muss nun diese in einer anderen einügen und zwar hier:
Dazu habe ich dann noch folgende Test Klasse:
Aber ich bekomm immer einen Fehler bei der Testklasse bzw. drei... das Kontonummer illigal ist: 1
Glaube mein Fehler liegt bei der Klasse Bank ganz unten bei getKonto...
Der Return wert stimmt glaub ich nicht so ganz.
Wichtig zu erwähnen wäre vielleicht auch, bevor ich die Klasse versucht habe zu ersetzen funktionierte die Klasse Bank wie sie sollte.
den geänderten Code habe ich auskommentiert.
Also es geht eigentlich nur darum das ich ein Array durch ein Arraylist ersetzt habe und nun bestimmte zeilen abändern muss. aber irgendwie haut das nicht hin : /
sitze seit Tagen an einer Aufgabe die ich nicht bewältigen kann : (
hoffe jemand von euch hat eine Idee.
erste Klasse:
Java:
package util;
/**
* Klasse zum Speichern von Daten. (sich selbst vergroesserndes Array).
* <p>
* Neue Daten werden stets am Ende angehaengt.. Der Zugriff auf die Inhalte
* erfolgt ueber die Indexnummer von 0 bis Anzahl der Elemente - 1.
*
* @param T
* Elementtyp
*/
public final class Array<T> {
/**
* Kennung "nicht gefunden".
*/
private static final int NOT_FOUND = -1;
/**
* Anzahl der gespeicherten Datenelemente
*/
private int size = 0;
/**
* Array zum Speichern der Daten.
*/
private Object[] data = new Object[2];
/**
* Gibt die Anzahl der gespeicherten Inhalte zurueck.
*
* @return Anzahl der Inhalte
*/
public int size() {
return size;
}
/**
* Gibt das index-te Element zurueck. Nur erlaubt, wenn genuegend viele
* Elemente gespeichert sind.
*
* @param index
* Elementnummer
* @return gewaehltes Element
* @throws IndexOutOfBoundsException
* wenn <tt>index</tt> illegal ist.
*/
@SuppressWarnings("unchecked")
public T get(int index) {
checkIndex(index);
return (T) data[index];
}
/**
* Speichert Inhalt. Das Objekt wird als letztes Element hinzugefuegt.
*
* @param neu
* zu speichernde Transkation.
*/
public void add(T neu) {
if (size == data.length)
increaseCapacity();
// TODO: ergaenzen
data[size++] = neu;
}
/**
* Gibt ein Feld zurueck, das die umgekehrte Elementreihenfolge hat. Das
* this-Objekt und seine Atribute werden nicht veraendert!
*
* @return neues umgedrehtes Array
*/
@SuppressWarnings("unchecked")
public Array<T> reversed()
{
// TODO: das ist komplett verkehrt!!
// (wieso eigentlich?)
//
// Hinweis es kann auch sein, dass Sie bei der richtigen Loesung
// einen Cast (T) benoetigen.
int z = data.length-1;
Object[] tmp = new Object[data.length];
Array<T> tmp2 = new Array<T>();
for(int i = 0; i<data.length;i++)
{
tmp[z] = data[i];
z--;
}
for(int i = 0;i<data.length;i++)
{
tmp2.add((T)tmp[i]);
}
return tmp2;
}
/**
* Gibt den Index des ersten Vorkommens von <tt>gesucht</tt> zurueck.
*
* @param gesucht
* Objekt das gesucht wird.
* @return Index des ersten Vorkommens oder -1 wenn nicht gefunden.
*/
public int indexOf(T gesucht) {
// TODO: selbst programmieren
// Hinweis: safeEquals benutzen!
for(int i = 0;i<data.length;i++)
{
if(safeEquals(gesucht,data[i]) == true)
{
return i;
}
}
return NOT_FOUND;
}
/**
* Sicherer Vergleich zweier Objekte auf Gleichheit.
* Auch der Vergleich mit {@code null} ist korrekt.
*
* @param a erstes Objekt
* @param b zweites Object
*
* @return {@code} true wenn beide Objekte gleich sind oder wenn beide
* Objekte {@code null} sind
*/
private static boolean safeEquals(Object a, Object b) {
//TODO: selbst programmieren
if(a == null)
{
if(b == null)
{
return true;
}
return false;
}
return a.equals(b);
}
/**
* Ersetzt das bestehende Array durch ein Array doppelter Groesse.
*/
private void increaseCapacity() {
// Todo: das ist nicht ganz richtig
Object[] t = new Object[2 * data.length];
for (int i = 0; i < data.length; i++)
{
t[i] = data[i];
}
data = t;
}
/**
* Prueft ob <tt>index</tt> im erlaubten Bereich von 0 bis Anzahl der
* Elemente - 1 liegt.
*
* @param index
* zu pruefender Index
* @throws IndexOutOfBoundsexception
* wenn <tt>index</tt> ausserhalb des erlaubten Bereichs liegt.
*/
private void checkIndex(int index) {
if (index < 0 || index >= size)
throw new IndexOutOfBoundsException(index + " nicht erlaubt");
}
}
Diese Klasse ist schon mal komplett richtig aber ich muss nun diese in einer anderen einügen und zwar hier:
Java:
package bank;
import util.Array;
/**
* Die Klasse stellt die einzige oeffentliche Schnittstelle fuer den Umgang mit einem Konto
* dar.
* Konten werden generell ueber die von der Bank vergebene Kontonummer angesprochen.
* Alle Methoden verlangen, dass die angegebenen Konten existieren, dass Geldbetraege groesser als 0 sind
* und dass das Konto eine eventuelle Auszahlung deckt.
*
* Wenn eine der Voraussetzungen nicht zutrifft, wird eine <code>IllegalArgumentException</code> geworfen.
*/
public final class Bank {
private final String name;
private final Array<Konto> konten = new Array<Konto>();
private int anzahlKonten = 0;
/**
* Erzeugt eine neue Bank.
* Die neue Bank hat noch keine Bankkonten.
*
* @param name Name der Bank.
*/
public Bank(String name) {
this.name = name;
}
/**
* Legt ein neues leeres Konto an. Konten werden intern
* gespeichert und koennen spaeter durch die von der Methode
* zurueckgegebene Kontonummer angesprochen werden.
*
* @return Kontonummer
*/
public int neuesKonto() {
int kontoNr = anzahlKonten + 1;
//konten[anzahlKonten++] = new Konto(name + ": " + kontoNr);
konten.add(new Konto(name+ ": " + kontoNr));
return kontoNr;
}
/**
* Fuehrt eine Bareinzahlung aus. Das angegebene Konto muss existieren
* und der Geldbetrag muss groesser als 0 sein.
*
* @param nr Kontonummer
* @param betrag Geldbetrag
* @throws IllegalArgumentException bei falscher Eingabe
*/
public void barEinzahlen(int nr, double betrag) {
getKonto(nr).barEinzahlen(betrag);
}
/**
* Fuehrt eine Barauszahlung aus. Neben der Forderung, dass der
* Geldbetrag positiv ist muss auch das Konto gedeckt sein.
*
* @param nr Kontonummer
* @param betrag Geldbetrag
* @throws IllegalArgumentException bei falscher Eingabe
*/
public void barAuszahlen(int nr, double betrag) {
getKonto(nr).barAuszahlen(betrag);
}
/**
* Fuehrt eine Ueberweiung aus. Die Ueberweisung ist nur moeglich,
* wenn sie durch das Ausgangskonto (quelle) gedeckt ist.
* Es ist nicht erlaubt, negative Betraege anzugeben.
*
* @param quelle Kontonummer von der aus ueberwiesen wird
* @param zielBank Bank zu der ueberwiesen wird
* @param zielKonto Kontonummer zu der ueberwiesen wird
* @param betrag Geldbetrag
* @throws IllegalArgumentException bei falscher Eingabe
*/
public void ueberweisen(
int quelle, Bank zielBank, int zielKonto, double betrag)
{
getKonto(quelle).ueberweisen(betrag, zielBank.getKonto(zielKonto));
}
/**
* Gibt den aktuellen Kontostand des angegebenen Kontos zurueck.
*
* @param nr Kontonummer
* @return aktueller Kontostand
* @throws IllegalArgumentException wenn das Konto nicht existiert.
*/
public double kontostand(int nr) {
return getKonto(nr).kontostand();
}
/**
* Gibt die Kontobewegungen fuer das angegebene Konto auf Standardausgabe
* aus.
*
* @param kontoNr Nummer des auszugebenden Kontos
* @throws IllegalArgumentException wenn das Konto nicht existiert
*/
public void kontobewegungenAusgeben(int kontoNr) {
getKonto(kontoNr).ausgabeVonAllenBuchungen();
}
/**
* Gibt den Namen der Bank zurueck.
* @return Name der Bank.
*/
public String toString() {
return name;
}
/**
* Sucht das Kontoobjekt bei bekannter Kontonummer.
*
* @param kontoNr Kontonummer
* @return Kontoobjekt
* @throws IndexOutOfBoundsException wenn das Konto nicht existiert
*/
private Konto getKonto(int kontoNr) {
if (kontoNr <= 0 || kontoNr > anzahlKonten)
throw new IllegalArgumentException(
"illegale Kontonummer: " + kontoNr);
//return konten[kontoNr - 1];
return konten.get(kontoNr-1);
}
}
Dazu habe ich dann noch folgende Test Klasse:
Java:
package bank;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.*;
public class BankTest {
private Bank b1;
int k1;
private static final double EPS = 1e-6;
@Before
public void setUp() throws Exception {
b1 = new Bank("b1");
k1 = b1.neuesKonto();
}
@Test
public void testToString() {
assertEquals("b1", b1.toString());
}
@Test
public void testNeuesKonto() {
assertEquals(0., b1.kontostand(k1), EPS);
}
@Test
public void testBarEinzahlen() {
b1.barEinzahlen(k1, 120);
assertEquals(120., b1.kontostand(k1), EPS);
}
@Test
public void testBarAuszahlen() {
b1.barEinzahlen(k1, 120);
b1.barAuszahlen(k1, 100);
assertEquals(20., b1.kontostand(k1), EPS);
}
@Test(expected = IllegalArgumentException.class)
public void testFalscheKontoNummer() {
b1.barAuszahlen(k1+1, 20);
}
@Test(expected=IllegalArgumentException.class)
public void nichtGedeckt() {
b1.barEinzahlen(k1, 60);
b1.barAuszahlen(k1, 100);
}
}
Aber ich bekomm immer einen Fehler bei der Testklasse bzw. drei... das Kontonummer illigal ist: 1
Glaube mein Fehler liegt bei der Klasse Bank ganz unten bei getKonto...
Der Return wert stimmt glaub ich nicht so ganz.
Wichtig zu erwähnen wäre vielleicht auch, bevor ich die Klasse versucht habe zu ersetzen funktionierte die Klasse Bank wie sie sollte.
den geänderten Code habe ich auskommentiert.
Also es geht eigentlich nur darum das ich ein Array durch ein Arraylist ersetzt habe und nun bestimmte zeilen abändern muss. aber irgendwie haut das nicht hin : /