I'm getting an error where it would keep giving me a stack overflow. What I basically wanna do is create an Array List of objects that have rectangles. However, if any of the object overlap one another then, I would call the method again and create an array till it creates an array of objects that do not overlap. Can anyone tell me whats wrong?
public class TokenArrayCreator {
public final int TOKEN_WIDTH= 35;
private GameToken token1;
private ArrayList<GameToken> tokenarr;
public TokenArrayCreator()
{}
public ArrayList<GameToken> ArrayCreator()
{
ArrayList<GameToken> tokenArray = new ArrayList<GameToken>();
Random random = new Random();
for(int i =0; i<=10 ;i++)
{
GameToken token= new GameToken(random.nextInt(300),random.nextInt(300),35,35);
tokenArray.add(token);
}
for(int i =0 ; i<=10 ; i++) // make two list i and j && if i != j
{
for(int j= 0; j<=10 ; j++)
{
if(i!=j)
{
if(tokenArray.get(i).overlaps(tokenArray.get(j)))
{
TokenArrayCreator t1= new TokenArrayCreator();
t1.ArrayCreator();
}
}
else break;
}
}
return tokenArray;
}
Above is my array creator class. Below is my overlap method that is in another class.
public boolean overlaps(VisibleShape other)
{
GameToken other1 = (GameToken) other;
if(this.bbox.intersects(other1.bbox))
{
return true;
}
else return false;
}
Here is the stack trace
Exception in thread "main" java.lang.StackOverflowError
at java.util.Hashtable.hash(Unknown Source)
at java.util.Hashtable.get(Unknown Source)
at javax.swing.UIDefaults.getFromHashtable(Unknown Source)
at javax.swing.UIDefaults.get(Unknown Source)
at javax.swing.MultiUIDefaults.get(Unknown Source)
at javax.swing.UIDefaults.getFont(Unknown Source)
at javax.swing.UIManager.getFont(Unknown Source)
at javax.swing.LookAndFeel.installColorsAndFont(Unknown Source)
at javax.swing.plaf.basic.BasicPanelUI.installDefaults(Unknown Source)
at javax.swing.plaf.basic.BasicPanelUI.installUI(Unknown Source)
at javax.swing.JComponent.setUI(Unknown Source)
at javax.swing.JPanel.setUI(Unknown Source)
at javax.swing.JPanel.updateUI(Unknown Source)
at javax.swing.JPanel.<init>(Unknown Source)
at javax.swing.JPanel.<init>(Unknown Source)
at javax.swing.JPanel.<init>(Unknown Source)
at CircPattern.<init>(CircPattern.java:25)
at Pattern.<init>(Pattern.java:40)
at GameToken.<init>(GameToken.java:18)
at TokenArrayCreator.ArrayCreator(TokenArrayCreator.java:26)
at TokenArrayCreator.ArrayCreator(TokenArrayCreator.java:40)
at TokenArrayCreator.ArrayCreator(TokenArrayCreator.java:40)
at TokenArrayCreator.ArrayCreator(TokenArrayCreator.java:40)
at TokenArrayCreator.ArrayCreator(TokenArrayCreator.java:40)
at TokenArrayCreator.ArrayCreator(TokenArrayCreator.java:40)
t1.ArrayCreator();you are creating a brand newArrayList, which then tries to fill itself with objects, which then finds overlapping elements, which then creates a new instance oft1.ArrayCreator();and the evil cycle starts over again...ForkBombedYourself