数组元素比较

时间:2015-12-18 07:59:47

标签: java arrays

我有一个最初为空的对象数组,即所有项都为null。

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属性都是相同的。

非常感谢任何帮助。 :)

3 个答案:

答案 0 :(得分:2)

首先,来吧伙计们,当然我可以编译自己的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 !!!
    }
}

但您必须实现自己的randomCreationcontradicts版本,请参阅TODO。

答案 1 :(得分:0)

1:你应该使用MyObject(因为Object已经存在!)

2:在构造函数中使用while循环

boolean not_done=true;

while (not_done)
{
// once again
// ...

if  ( // no contradiction
  not_done=false;

全部

答案 2 :(得分:0)

您应该将Random()逻辑移出Object构造函数,在运行Object - 创建循环的类中运行它,并将准备好的数字传递给{{1构造函数。有几个原因:

1)在构造函数中加入这么多逻辑并不是一种干净的方法,应该避免使用。构造函数应该创建对象,它也可以调用设置它的方法,但不应该包含太多的逻辑本身。代码清理: - )

2)如果在父对象中创建随机数,您将能够遍历Object's []以确保以前创建的对象都不包含新数字: - )