【发布时间】:2015-03-15 17:54:09
【问题描述】:
我想要做的是创建一个方法,每次检查矩形数组中的两个矩形是否相交,以及它们是否将两个矩形中的一个重新定位在框架上的其他位置,而不是在另一个矩形上。
Random rand = new Random();
Rec[0] = new Rectangle(100,100,50,50);
for(int i = 0; i<recs.length; i++){
for(int j = i+1; j<recs.length;j++){
if(recs[i].intersects(recs[j])){
recs[i] = new Rectangle(rand.nextInt(501),rand.nextInt(501),50,50);
repaint();
}
}
}
帧大小为 500x500 当我执行此代码时,它仍然有相交的矩形。 我做错了什么?
包装q1;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.util.Random;
import javax.swing.JComponent;
public class RectangleComponent extends JComponent{
public Rectangle[] recs;
private Random rand;
RectangleComponent(){
rand = new Random();
recs = new Rectangle[6];
//these two intersect
recs[0] = new Rectangle(100,100,50,50);
recs[1] = new Rectangle(110,90,50,50);
//
recs[2] = new Rectangle(200,200,50,50);
recs[3] = new Rectangle(300,300,50,50);
recs[4] = new Rectangle(400,400,50,50);
recs[5] = new Rectangle(250,250,50,50);
for(int i = 0; i<recs.length; i++){
for(int j = i+1; j<recs.length;j++){
if(recs[i].intersects(recs[j])){
recs[i] = new Rectangle(rand.nextInt(501),rand.nextInt(501),50,50);
repaint();
}
}
}
}
public void paintComponent(Graphics g){
Graphics2D g2 = (Graphics2D) g;
for(Rectangle x : recs){
g2.draw(x);
}
}
}
import javax.swing.JFrame;
public class RectangleViewer {
public static void main(String[]args){
JFrame frame = new JFrame();
RectangleComponent comp = new RectangleComponent();
frame.add(comp);
frame.setSize(500,500);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
如果你运行它几次,最终一些矩形会覆盖另一个。
【问题讨论】:
-
你真的认为重叠矩形的随机移动总是会将其重新定位到没有矩形的地方吗?
-
您在 for 循环中完成整个操作,它只会重新创建一次矩形。现在让我们假设,你在外循环的最后一个矩形。而你在内部forloop的最后一轮。你是矩形与另一个矩形相交,你重新创建它并且循环中断。但您没有检查新矩形是否与任何矩形相交
-
那么,我该怎么做呢?
-
好的,我试试看
标签: java arrays swing rectangles