Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Es soll eine Klasse ObjectStore implementiert werden, die beliebige Objekte in einem Array verwaltet. Die Größe des Arrays soll beim Erzeugen eines Objektes der Klasse angegeben werden können. Desweiteren sollen die folgenden Methoden erstellt werden.
1. public Object getData(ind idx): Liefert das Objekt object am Index idx aus dem Array zurück. Falls idx größer ist als die max. Anzahl der Elemente im Array, wird null zurück geliefert.
2. public boolean setData(int idx, Object data): Setzt das Objekt object an den Index idx des Arrays, sofern dieser Eintrag noch leer ist. Die Methode liefert true wenn das Objekt data eingefügt werden konnte und false wenn das Objekt nicht eingefügt werden konnte (idx größer als Array oder an dem Index ist bereits ein Objekt gespeichert).
Habs jetzt das ganze jetzt mal so gemacht, wie bekomme ich Zugriff auf das Array, eclispse sagt immer cannot make a static reference to the non-static field o, weiß nicht was ich jetzt machen soll
Vielleicht hat jemand ja eine Idee, oder kann mir sagen ob der Code soweit überhaupt funktionieren würde.
Vielen Dank!
Code:
import java.io.*;
public class ObjectStore {
Object o[];
public ObjectStore(int i) {
o = new Object[i];
}
public Object getData(int idx) {
if (idx > o.length) {
return null;
}
return o[idx];
}
public boolean setData(int idx, Object data) {
if (idx > o.length || o[idx] != data) {
return false;
}
o[idx] = data;
return true;
}
public static void main(String[] args) {
System.out.println("Bitte die Anzahl eingeben!");
BufferedReader tast = new BufferedReader(new InputStreamReader(
System.in));
try {
int i;
i = Integer.parseInt(tast.readLine());
ObjectStore os = new ObjectStore(i);
}
catch (Exception e) {
System.out.println("Es ist ein Fehler aufgetreten!");
}
o.setData(); // Hier sagt das Eclipse mit dem static...
}
}
Hab den Code mal geändert, soweit so gut doch die zweite Bedingung war vorher
Zeile 20
Code:
if (idx > o.length || o[idx] != data)
hatte ich wohl falsch formuliert, denn damit soll sie ja false liefern für (idx größer als Array oder an dem Index ist bereits ein Objekt gespeichert) wobei ich nicht weiß wie ich prüfen kann ob an dem Index schon ein Objekt gespeichert ist müsste == sein, oder damit wird doch die Referenz verglichen?! Ist der Code jetzt so wie es die Aufgabenstellung verlangt?
Ausgabe auf Console ist
true
true
true
true
true
0
2
4
6
8
Code:
public class ObjectStore {
Object o[];
public ObjectStore(int i) {
o = new Object[i];
}
public Object getData(int idx) {
if (idx > o.length) {
return null;
}
return o[idx];
}
public boolean setData(int idx, Object data) {
if (idx > o.length|| o[idx] == data) { // voher war != müsste aber == sein oder? s.o.
return false;
}
o[idx] = data;
return true;
}
public static void main(String[] args) {
ObjectStore os=new ObjectStore(5);
for(int j=0;j<5;j++){
System.out.println(os.setData(j, 2*j));
}
for(int j=0;j<5;j++){
System.out.println(os.getData(j));
}
}
}
in der set-Operation darfst du nicht mit data vergleichen,
es können doch auch ANDERE Objekte drin sein..,
schaue nach ob null drin ist (frei) oder nicht!
-------
die Bedingung 'idx > o.length' ist (zwei mal im Programm) falsch,
du solltest sowieso dein Programm grenzwertig testen,
also bei Länge 5 mal Index -1, 0, 4,5,6 und 70000 abfragen,
Hi, super vielen Dank!!!
Hab mal die Änderungen gemacht,
doch das mit private leuchtet mir ein, weil sonst bräuchte ich ja keine set u. get Methode.
Mit null hast du auch Recht. Doch mit 'idx > o.length' hab ich mal ein bisschen rumgespielt und daraus 'idx > o.length-1' gemacht scheint zu funktionieren, allerdings glaube ich warum
denn .length liefert doch die Länge des Arrays zurück also z.B.
Code:
int Array[]=new Array[12];
Die Felder im Array sind von 0-11 =12 Felder.
damit ist Array.length=12 oder? und daher muss ich noch -1 machen stimmts, weil bei Zugriff auf Array[12] wäre ich nicht mehr im Bereich des Arrays und würd ne Exception bekommen?
Ausgabe:
Jetzt mit setData Elemente setzen:
0. true
1. true
2. true
3. true
4. true
5. false
6. false
Jetzt mit getData Elemente holen:
0. 0
1. 2
2. 4
3. 6
4. 8
5. null
6. null
Geänderter Code
Code:
import java.io.*;
public class ObjectStore {
private Object o[];
public ObjectStore(int i) {
o = new Object[i];
}
public Object getData(int idx) {
if (idx > o.length-1) {
return null;
}
return o[idx];
}
public boolean setData(int idx, Object data) {
if (idx > o.length-1|| o[idx] != null) {
return false;
}
o[idx] = data;
return true;
}
public static void main(String[] args) {
ObjectStore os=new ObjectStore(5);
System.out.println("Jetzt mit setData Elemente setzen:");
for(int j=0;j<7;j++){
System.out.println(j+". "+os.setData(j, 2*j));
}
System.out.println("\nJetzt mit getData Elemente holen:");
for(int j=0;j<7;j++){
System.out.println(j+". "+os.getData(j));
}
}
}