SimpleArrayList

JAVAC1

Mitglied
hallo,
der Compiler gibt mir den Fehler aus, dass in den Methoden "boolean remove" und "boolean contains" das return statement fehlt.ich weiß leider nicht weiter.könnt ihr helfen?

Java:
public class SimpleArrayList <E> {
	public E[] data;
	public int size;
	public SimpleArrayList(int initialCapacity) {
		this.data=(E[]) new Object[initialCapacity];
		this.size=0;
	}
	public SimpleArrayList() {			//wird keine initialCapacity angegeben, beträgt sie 10
		this(10);
	}
	public void ensureCapacity(int minCapacity) {		//gucken, ob genug Platz für neue
		int oldCapacity=this.data.length;				//Objekte vorhanden ist
		if(minCapacity>oldCapacity) {
			E[]oldData=this.data;						//Zwischenspeichern der alten Daten
			int newCapacity=(2*oldCapacity<=oldCapacity+10)?(2*oldCapacity):(oldCapacity+10);	//boolean-true-false
			if(newCapacity<minCapacity) {				//falls immer noch zu klein
				newCapacity=minCapacity;
			}
			this.data=(E[])new Object[newCapacity];		//Anlegen des neuen Feldes mit der neuen Kapazität
			for(int i=0; i<oldCapacity; i++) {			//Auffüllen des neuen Feldes mit den zwischenge-
				this.data[i]=oldData[i];				//speicherten Werten
			}
		}
	}
	public void shiftRight(int index) {					//Verschieben der Elemente nach rechts, z.B, wenn
		for(int i=this.size; i>index; i--) {			//ein Element an einen Index eingefügt werden soll,
			this.data[i]=this.data[i-1];				//der bereits besetzt ist
		}
	}
	public void shiftLeft(int index) {					//Verschieben der Elemente nach links,
		for(int i=index; i<this.size-1; i++) {			//z.B., wenn ein Element gelöscht wurde
			this.data[i]=this.data[i+1];
		}
	}
	public void rangeCheck(int minIndex, int index, int maxIndex) {	//Prüfung, ob die Liste überhaupt lang
		if(index<minIndex || index>maxIndex) {	//"||"=oder			//genug ist für ein Element, das an 
			throw new IndexOutOfBoundsException();					//einen bestimmten Index eingefügt 
		}															//werden soll
	}
	public void shrinkCapacity() {			//Schrumpfen eines Feldes bei zu vielen freier Kapazität
		int oldCapacity=this.data.length;
		int newCapacity=oldCapacity;
		if(oldCapacity-this.size>10) {
			newCapacity=oldCapacity/2;
		}
		if(this.size<oldCapacity-10) {
			newCapacity=oldCapacity/2;
		}
		if(newCapacity<oldCapacity) {		//falls Feld kleiner geworden ist als Ursprungsfeld
			E[]oldData=this.data;			//Zwischenspeichern des alten Feldes
			this.data=(E[])new Object[newCapacity];		//Anlegen neues Feld mit neuer Kapazität
			for(int i=0; i<newCapacity; i++) {			//Auffüllen des neuen Feldes
				this.data[i]=oldData[i];
			}
		}
	}
	public boolean add(E o) {			//Hinzufügen eines Elementes
		if(o!=null) {						
			ensureCapacity(this.size+1);	//this.size+1 = Index, an dem o eingefügt wird
			this.data[this.size]=o;			//Einfügen an Index
			this.size++;					//size wächst um 1 (für Abfrage nach size)
			return true;					
		} else
			return false;					//z.B., falls Element leer war(null)
	}
	public boolean remove(E o) {					//Entfernen des 1. Elements in der Liste, 
		for(int i=0; i<this.data.length; i++) {		//das zu o inhaltsgleich ist
			if(this.data[i]==o) {
				this.data[i]=null;
				shiftLeft(i);
				this.size--;
				return true;
			} else
				return false;
		}
	}
	public boolean isEmpty() {			//Überprüfung, ob Liste leer ist
		return this.size==0;			//true, wenn size=0
	}
	public int size() {					//Abfragen der Anzahl der Elemente in der Liste
		return this.size;
	}
	public boolean contains(E o) {		//Überprüfung der Liste auf ein zu o inhaltsgleiches Objekt//true, wenn eines gefunden wurde
		for(int i=0; i<this.data.length; i++) {	
			if(this.data[i]==o) {
				return true;
			} else
				return false;
		}
	}
	public E get(int index) {			//Rückgabe des Elementes an bestimmten Index
		rangeCheck(0,index,this.size-1);
		return this.data[index];
	}
	public void add(int index, E o) {	//Einfügen eines Elements an der Position Index
		if(o!=null) {
			rangeCheck(0,index,this.size);
			ensureCapacity(this.size+1);
			shiftRight(index);
			this.data[index]=o;
			this.size++;
		}
	}
	public E remove(int index) {			//Entfernen eines Elements an der Stelle Index
		rangeCheck(0,index,this.size-1);	//wenn Element an einem Index entfernt werden soll, der
		E result=this.data[index];			//entweder nicht vorhanden oder nicht besetzt ist
		shiftLeft(index);
		this.size--;
		return result;						//hier wird dann nochmal angezeigt, welches Element entfernt wurde
	}
}
 

JAVAC1

Mitglied
hab das jetzt geändert, aber immer noch dieselbe fehlerausgabe:

Java:
public boolean remove(E o) {					
		if(data.length!=0) {
			for(int i=0; i<this.data.length; i++) {		
				if(this.data[i]==o) {
					this.data[i]=null;
					shiftLeft(i);
					this.size--;
					return true;
				} else
					return false;
			}
		}
}
 

JAVAC1

Mitglied
so auch nicht....ach manno:

Java:
public boolean remove(E o) {					
		if(data.length!=0) {
			for(int i=0; i<this.data.length; i++) {		
				if(this.data[i]==o) {
					this.data[i]=null;
					shiftLeft(i);
					this.size--;
					return true;
				} else
					return false;
			}
		} else
			return false;
}
 

Fant

Bekanntes Mitglied
Das ist natürlich Blödsinn, aber was ist denn, wenn length nen negativen Wert zurückgibt? Der Kompiler kann das wahrscheinlich nicht richtig entscheiden und meckert, weil es ganz theoretisch ja dazu kommen könnte, dass der Rückgabewert nicht definiert ist..


Java:
public boolean remove(E o) {                    
            for(int i=0; i<this.data.length; i++) {     
                if(this.data[i]==o) {
                    this.data[i]=null;
                    shiftLeft(i);
                    this.size--;
                    return true;
                } else
                    return false;
                }
            return false;
}

Jetzt wird auf jeden Fall false zurückgegeben, wenn du nicht in dir for-Schleife springst.
 

Fant

Bekanntes Mitglied
Nicht auf deine Frage bezogen, aber der eigentliche Code kommt mir merkwürdig vor. Ich tippe einfach mal, dass du das "else return false;" in Zeile 8/9 komplett streichen solltest. In Zeile 3 brauchst du zudem vermutlich einen Vergleich mit equals. Ist aber nur geraten, da ich mir nicht die Mühe gemacht habe zu schauen, was du eigentlich machen willst ;)
 
Zuletzt bearbeitet:

Oben