ArrayIndexOutOfBoundsException

stephanie

Aktives Mitglied
Hallo, ich will eine Vereinigung von zwei Mengen. Mein Program gibt Error wie folgendes:


7
6
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4
at Kapitel3.Menge.addElem(Menge.java:21)
at Kapitel3.Menge.vereinigung(Menge.java:50)
at Kapitel3.Menge.main(Menge.java:79)

Mein Code ist so:Was mache bei Vereinigung(Menge menge) als Fehler?
Java:
public class Menge implements Services{
	
	private int anzahl;
	private int dimension;
	private int[] element;
	
	Menge(int dimension){
		this.dimension=dimension;
		element=new int[dimension];
		anzahl=0;
	}
	
	@Override
	public boolean addElem(int value) {
		if(this.isElem(value)!=-1){
			return true;
		}
		else 
			element[anzahl]=value;
			anzahl++;
				
		return true;
	}
	@Override
	public int isElem(int value) {
		int index=0;
		for(int i=0; i<element.length;i++){
			if(element[i]==value){
				index=i;
			break;}
			else {
				index=-1;
			}}
		return index;
	}

	
	@Override
	public int numberOfElem() {
		
		return anzahl;
	}
	
	public Menge vereinigung(Menge menge){
		Menge menge1= new Menge(4);
		if(menge.numberOfElem()>menge1.numberOfElem()){
		for(int i=0; i<menge.numberOfElem();i++)
			menge1.addElem(menge.element[i]);
			return menge1;}
			else
				for(int i=0;i<menge1.numberOfElem();i++)
					menge.addElem(menge1.element[i]);			
		return menge;
		
	}
	public static void main(String args[]){
		Menge menge=new Menge(7);
		menge.addElem(1);
		menge.addElem(2);
		menge.addElem(3);
		menge.addElem(4);
		menge.addElem(5);
		menge.addElem(6);
		menge.addElem(7);
		Menge menge1=new Menge(8);
		menge1.addElem(1);
		menge1.addElem(2);
		menge1.addElem(3);
		menge1.addElem(4);
		menge1.addElem(9);
		menge1.addElem(10);
		System.out.println(menge.numberOfElem());
		System.out.println(menge1.numberOfElem());
		System.out.println(menge.vereinigung(menge1));
	}
}
 
Zuletzt bearbeitet von einem Moderator:
Guck dir mal deine Methode [c]public Menge vereinigung(Menge menge)[/c] an. [c]Menge menge1 = new Menge(4);[/c] könnt etwas knapp werden in dem Array 😉
 
In der Methode vereinigung() instanzierst du ein neues Objekt menge, welches ein Array der Grösse 4 erstellt. Dann fügst du dieser Menge mehr als 4 Elemente hinzu, wodurch anzahl irgendwann 4 wird und [c]element[anzahl]=value;[/c] einen Fehler wirft.
 
Erm, wie?

Wie wäre es z.B. mit:

Java:
Menge menge1 = new Menge(this.numberOfElem() + menge.numberOfElem());

Das langt auf jeden Fall

Dann packste noch:

Java:
	public String toString(){
		StringBuffer sb = new StringBuffer();
		sb.append(" = ");
		for(int i : element){
			sb.append(i);
			sb.append(",");
		}
		sb.deleteCharAt(sb.length()-1);
		return sb.toString();
	}

mit bei und kannst die ansehn was du so machst:
Java:
System.out.println(menge.numberOfElem() + menge.toString());
System.out.println(menge1.numberOfElem()+ menge1.toString());
System.out.println(menge.vereinigung(menge1).numberOfElem() + menge.vereinigung(menge1).toString());
 
Zuletzt bearbeitet von einem Moderator:
Mach doch die Menge so gross wie die Menge, die du als Argument erhalten hast.

Aber ich sehe eher ein prinzipielles Problem, wenn du deinen Mengen eine maximale Grösse mitgibst. Eigentlich sollten sie sich doch beliebig vergrössern können, oder nicht? Falls das so ist, dann verwende doch eine ArrayList<Integer> anstatt einem int[] array.
 

Zurück
Oben