我有一个对象数组,它最初是空的,即所有项都为空。
Object o[]={null,null,null,null,null}
类Object已经定义。
class Object
{
int type;
int x;
int y;
Object(int index)
{
type = new Random().nextInt(2);
int[] xValues={25,95,175,245};
x=xValues[new Random().nextInt(4)];
y=new Random().nextInt(20)*-150;
for(int n=0;n<o.length;n++)
{
try
{
if(o[n].y==y && o[n].x==x)
{
//This is a contradiction and so change the values of x and y as desired
}
}catch(Exception e){}
}
}
}
我现在为数组的每个元素添加值。
int i=0;
while(i<5)
{
o[i] = new Object(i);
i++;
}
在添加之前,我想将该对象的属性与数组的所有其他元素进行比较,以便将其合并到类的构造函数中。到目前为止还不错。
现在,根据我的结果(以确保它不会与数组的其他对象相矛盾),我修改了要添加的对象的属性。然而,由于我只循环一次,我可能与我已经浏览过的某个对象发生了矛盾。我没有办法检查。
我该如何确保数组中的每个对象都不会与其他对象相矛盾?
PS:矛盾的意思是一个物体的x和y属性是相同的。
如有任何帮助,我们将不胜感激
首先,伙计们,当然,如果它在不同的包中,我可以编译自己的Object类。。。但我同意为自己的类使用这样特殊的名称不是一个好的做法。。。
看起来,你想创建N个对象。。。
我会像这个那样做
package q34350913;
import java.util.LinkedList;
import java.util.List;
public class Object {
// TODO: add your properties...
public static void main(final String[] args) {
final List<Object> list = new LinkedList<Object>();
final int N = 5;
while (list.size() < N) {
final Object newObject = randomCreation();
if (isOkToAdd(list, newObject)) {
list.add(newObject);
}
}
}
private static Object randomCreation() {
return null; // TODO !!!
}
private static boolean isOkToAdd(final List<Object> list, final Object newObject) {
for (final Object listItem : list) {
if (contradicts(listItem, newObject)) {
return false;
}
}
return true;
}
private static boolean contradicts(final Object listItem, final Object newObject) {
return false; // TODO !!!
}
}
但是您必须实现自己版本的randomCreation
和contradicts
,请参阅TODO。
1:您应该使用MyObject(因为Object已经存在!)
2:在构造函数中使用while循环
boolean not_done=true;
while (not_done)
{
// once again
// ...
if ( // no contradiction
not_done=false;
这都是
您应该将Random()
逻辑从Object
构造函数中移出,在运行Object
创建循环的类中运行它,然后将准备好的数字传递给Object's
构造函数。这有几个原因:
1) 在构造函数中放入这么多逻辑不是一种干净的方法,应该避免。构造函数应该创建对象,它也可以调用设置对象的方法,但本身不应该包含太多逻辑。代码清理:-)
2) 如果您在父对象中创建随机数,您将能够遍历Object
[],以确保以前创建的对象都不包含新数:-)