array probleem

Status
Niet open voor verdere reacties.

vermicelli

Nieuwe gebruiker
Lid geworden
20 jul 2010
Berichten
3
Beste mensen,

ik moet een opdracht maken voor school het luid als volgt:
opdracht: retourneert een (nieuw) array met de getallen uit getalRij die groter zijn dan of gelijk zijn aan grens.
met bijbehorende methode
public static int[] selecteer(int[] getalRij, int grens)
Als foutmelding wordt er gegeven:
Code:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4
	at test.project.selecteer(project.java:14)
	at test.project.main(project.java:31)
Mijn code is:
Code:
package test;

public class project {
	private static int[] selecteer(int[]getalRij, int grens)
	{
		int[] array = new int[4];
		
		for(int i = 0; i<= getalRij.length; i++)
		{
			if(getalRij[i]> grens)
			{
				array[i]=getalRij[i] ;
				
			}
		}
		return array;
	}
	
	public static void main(String[] args) 
	{
		int[] array = {4,6,7,22,41,54,4333,1};
		int grens = 10;
		System.out.println("De getallen boven de 10 zijn: "+selecteer(array,grens));
	}
}


Wat moet ik doen om het probleem op te lossen?
Ik was eigenlijk van plan om het anders aan te pakken:
Code:
package test;

public class project {

	private static int[] selecteer(int[]getalRij, int grens)
	{
		int[] array = new int[0];
		for(int i = 0; i<= getalRij.length; i++)
		{
			if(getalRij[i]> grens)
			{
				array = new int[i];
				array[i]=getalRij[i] ;
			}
		}
		    return array;
	}
	
	public static void main(String[] args) 
	{
		int[] array = {4,6,7,22,41,54,4333,1};
		int grens = 10;
		System.out.println("De getallen boven de 10 is: "+selecteer(array,grens));
	}
}

Dus als er een getal gevonden wordt dat boven de grens ligt, dat de lengte van de array wordt opgehoogd.
Maar dan geeft Java als foutmelding
Code:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
	at test.project.selecteer(project.java:14)
	at test.project.main(project.java:31)

alvast bedankt!
 
Het gaat fout bij <= (Kleiner of gelijk)

bv
Stel je hebt een Array met daarin 4 getallen. De array heeft dus een lengte van 4 maar het eerste getal in de array begint op postie 0
Code:
eerste getal in de array   getalRij[0]   <-- positie 0
tweede getal                    getalRij[1] <-- positie 1
derde getal                      getalRij[2] <-- positie 2
vierde getal                      getalRij[3] <-- positie 3

Dus in jou for-loop loop jij door todat i gelijk is aan de lengte van de array maar zoals je in het vb kunt zien bestaat die positie niet vandaar de out of bounds excetion

Dus wat je in je for-loop moet zeggen is dat die moet ophouden met loopen voordat i gelijk is aan de lengte.
dus dan wordt de loop for(int i = 0; i< getalRij.length; i++)

< ipv <=
 
Ik zat nog ff te kijken naar de rest van de code en ik vind het een beetje raar dat je de getallen die groter zijn dan een bepaalde waarde in een array stopt aangezien je van te voren niet weet hoe groot die array moet zijn.

Nu ben ik niet echt bekend met Java ( maar wel met c#) dus het kan zijn dat ik iets mis maar volgens mij kun je beter daarvoor een arraylist gebruiken aangezien die wel kan groeien en dan aan het einde het weer terug converteren naar een array.

Hierbij de code (ik weet niet of de syntac helemaal goed is) hoe ik denk dat het moet zijn.

Code:
	private static int[] selecteer(int[]getalRij, int grens)
	{
		ArrayList<int> lijst = new ArrayList<int>();

		for(int i = 0; i< getalRij.length; i++)
		{
			if(getalRij[i]>= grens)
			{
				lijst.add(getalRij[i]);
				
			}
		}
		return lijst.toArray(new int[lijst.size()]);
	}
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan