E
Eikonium
Gast
Gott zum Gruße, liebe Java-Kenner.
Ich bin Informatik-Student, wir behandeln zurzeit Collections in Java.
Eine Übungsaufgabe verlangt von uns, dass wir das folgende Interface implementieren:
Es soll sich dabei um eine Klasse handeln, deren Objekte viele Objekte eines beim Erzeugen bestimmten Typs speichern können.
Der Haken an der Sache: Wir sollen die Aufgabe mit normalen Arrays lösen, es sind keine ArrayLists oder sonstwas erlaubt. Man muss also neue Arrays mit neu bestimmter Größe erstellen, wenn die Anzahl der zu speichernden Dinge die Größe des Arrays überschreitet.
Aber Java unterstützt ja keine generischen Arrays, deren Typ man zur Laufzeit erst festlegt.
Also dachte ich an den Workaround, ein Objekt-Array zu erstellen und dann einen Typecast auf den gewünschten Typ durchzuführen.
Daran bin ich aber gescheitert.. ich bekomme immer eine java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String; at MyDictionary.main(MyDictionary.java:61)
(wobei String der Typ ist, den ich in der Main-Methode testweise ausprobiert habe).
Ich weiß überhaupt nicht mehr, woran das liegen könnte...
Mein Code (in den Zeilen 7 und 27 werden mittels (E[]) Typecasts durchgeführt):
Ich danke für eure Mithilfe,
Eikonium
Ich bin Informatik-Student, wir behandeln zurzeit Collections in Java.
Eine Übungsaufgabe verlangt von uns, dass wir das folgende Interface implementieren:
Java:
public interface Dictionary<E> {
public void insert (E e); // Einfuegen von Element e
public void remove (E e); // Entfernen von Element e
public boolean contains (E e); // Existenz pruefen
}
Es soll sich dabei um eine Klasse handeln, deren Objekte viele Objekte eines beim Erzeugen bestimmten Typs speichern können.
Der Haken an der Sache: Wir sollen die Aufgabe mit normalen Arrays lösen, es sind keine ArrayLists oder sonstwas erlaubt. Man muss also neue Arrays mit neu bestimmter Größe erstellen, wenn die Anzahl der zu speichernden Dinge die Größe des Arrays überschreitet.
Aber Java unterstützt ja keine generischen Arrays, deren Typ man zur Laufzeit erst festlegt.
Also dachte ich an den Workaround, ein Objekt-Array zu erstellen und dann einen Typecast auf den gewünschten Typ durchzuführen.
Daran bin ich aber gescheitert.. ich bekomme immer eine java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String; at MyDictionary.main(MyDictionary.java:61)
(wobei String der Typ ist, den ich in der Main-Methode testweise ausprobiert habe).
Ich weiß überhaupt nicht mehr, woran das liegen könnte...
Mein Code (in den Zeilen 7 und 27 werden mittels (E[]) Typecasts durchgeführt):
Java:
public class MyDictionary<E> implements Dictionary<E> {
//Attribute
private E[] array; //speichert die Objekte
private int size; //gibt die belegte Größe des Arrays an, also gleichzeitig den Indey des ersten folgenden freien Platzes
//Konstruktor
public MyDictionary() {
this.array = (E[]) new Object[10]; //hier Typecast
this.size = 0;
}
//Methoden
//prüft, ob ein Element enthalten ist
public boolean contains (E e){
for(int i=0; i<this.size;i++) {
if (e == this.array[i]){
return true;
}
}
return false;
}
//Insert fügt ein Element am Ende des Arrays ein
public void insert (E e){
if (this.array.length == this.size) { //wenn das momentane Array maximal gefüllt ist
Object[] greaterarray = new Object[this.array.length*2]; //wird ein doppelt so großes Objektarray erstellt
for (int i =0; i<this.array.length; i++) { //die Einträge werden kopiert
greaterarray[i]=this.array[i];
}
this.array = (E[]) greaterarray; //das neue Array wird typegecastet und dem Attribut zugewiesen
}
this.array[this.size] = e;
this.size++;
}
//entfernen alle Elemente e
public void remove (E e){
for (int i =0; i<=this.size;i++) {
if (this.array[i] == e) {
for (int j=i; j<=this.size-1;j++) {
this.array[j]=this.array[j+1];
}
this.size=this.size-1;
}
}
}
//Stringdarstellung
public String toString() {
String result = new String();
result = "[ ";
for (int i=0;i<=this.size;i++){
result = result + this.array[i];
if (i<this.size) result=result + ",";
}
result = result + " ]";
return result;
}
//main Methode... hier wird irgendwo der Fehler aufgerufen
public static void main(String[] args) {
MyDictionary<String> test = new MyDictionary();
for (Integer i = 0;i<20;i++) {
test.insert(Integer.toString(i*100));}
for (Integer i=0; i<5;i++) {
test.remove(Integer.toString(i*200));}
for (Integer i=0; i<test.size;i++) {
System.out.println(test.array[i]);}
}
}
Ich danke für eure Mithilfe,
Eikonium