【发布时间】:2015-03-13 00:16:09
【问题描述】:
我收到一个错误,它会不断给我一个堆栈溢出。我基本上想做的是创建一个具有矩形的对象的数组列表。但是,如果任何对象相互重叠,我会再次调用该方法并创建一个数组,直到它创建一个不重叠的对象数组。谁能告诉我怎么了?
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;
}
上面是我的数组创建者类。下面是我在另一个类中的重叠方法。
public boolean overlaps(VisibleShape other)
{
GameToken other1 = (GameToken) other;
if(this.bbox.intersects(other1.bbox))
{
return true;
}
else return false;
}
这是堆栈跟踪
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();时,您都在创建一个全新的ArrayList,然后它会尝试用对象填充自己,然后找到重叠的元素,然后创建t1.ArrayCreator();的一个新实例,邪恶的循环又开始了…… -
发布堆栈跟踪。
-
正如 MadProgrammer 所说...你已经
ForkBombedYourself -
无限递归是栈溢出最常见的原因。
标签: java arrays shapes rectangles