Java中如何确保两个随机坐标对象位置不重复?现有代码偶发失效
问题分析与修正
你的代码存在几个关键问题,导致规则偶尔失效:
- 初始坐标生成错误:第一行
int x = getRandom(x);里,你把未初始化的变量x作为参数传给getRandom,这会导致生成的初始坐标不符合预期范围,直接埋下重叠隐患。 - 循环内变量作用域与赋值缺失:循环里定义的
int x和int y是局部变量,和循环外的变量并非同一对象;更重要的是,生成新坐标后你没有把这些值赋值给目标对象(比如object2.setX(x)、object2.setY(y))。这意味着循环只是在生成无用的坐标,对象的位置完全没更新,自然无法解决重叠问题。 - 循环逻辑漏洞:如果初始时两个对象已经重叠,循环会持续执行但永远不会改变对象位置,陷入无效循环;如果初始不重叠,循环直接跳过,但初始坐标的生成错误仍可能导致后续出现重叠。
修正后的代码示例
假设你要给object2生成不与object1重叠的随机坐标,修正后的代码如下:
// 先给object2生成初始坐标,传入正确的范围参数 int x = getRandom(min, max); int y = getRandom(min, max); object2.setX(x); object2.setY(y); // 检查是否重叠,重叠则重新生成并更新对象坐标 while(object1.getX() == object2.getX() && object1.getY() == object2.getY()){ x = getRandom(min, max); y = getRandom(min, max); object2.setX(x); object2.setY(y); }
或者更简洁的写法,把生成和赋值整合到循环里,从根源避免初始重叠:
do { int x = getRandom(min, max); int y = getRandom(min, max); object2.setX(x); object2.setY(y); } while(object1.getX() == object2.getX() && object1.getY() == object2.getY());
这样每次生成新坐标后都会立即更新对象位置,循环条件也能正确判断是否重叠,确保最终两个对象位置不重复。
内容的提问来源于stack exchange,提问作者user20317493
相关产品推荐
相关产品推荐

