将对象添加到数组值

时间:2014-05-03 03:55:05

标签: java arrays object

我不确定标题是否与我的问题正确相关,请随时修改! :)

我要做的是,访问java中的m x n矩阵,同时根据特定条件标记访问过的节点

    //int a[][] = new int[5][5];
for(int i = 0;i< a.length;i++) //row
        for(int k = 0;k<a[0].length;k++) //column
            if((i+k) % 3 ==0 ) //condition
                a[i][k].visited = true;
            else
                a[i][k].visited = false;

在记忆中,我想象的是:

 _ _ _ _
|       |       
|a[0][3]| - > Visited //(for true)  
|_ _ _ _|

但我收到了错误:

  

访问无法解析或不是字段

有人可以帮助我如何标记数组块,或者例如将任何值与它们相关联,例如:

a[i][i].name = "Boston"
a[i][i].country = "India"

虚拟程序我正在使用,类似于我的实际代码

class TestingGround {

    int a[][] = new int[5][5];
    boolean visited = false;

    public static void main(String[] args) {
        TestingGround tg = new TestingGround();
        tg.runner();

    }

    void runner()
    {
        for(int i = 0;i< a.length;i++)
            for(int k = 0;k<a[0].length;k++)
                if((i+k) % 3 ==0 )
                    a[i][k].visited = true;
                else
                    a[i][k].visited = false;
    }
}

5 个答案:

答案 0 :(得分:2)

您已使用int创建了二维数组,因此您只能将每个数组设置为整数值。

为了能够设置.name.country之类的内容,您需要创建一个包含您需求的类对象数组。

例如:描述你的对象(注意:这只是一个简单的例子,应该进行改进)

public class MyObject
{
    public String name;
    public String country;
}

然后在其他地方:

MyObject arr[][] = new MyObject[5][5];
arr[0][3].name = "SomeName";

答案 1 :(得分:1)

使用name[index]表示法访问数组时,您正在做的是访问数组中该索引处的对象。您可以在此对象上调用的方法取决于创建它时数组的静态类型(但是,可以使用此方法进行转换)。例如,String[] array表示arrayString个对象的数组,因此如果您执行array[i],您可以执行的方法是您可以在String上执行的方法对象。

因此,如果要以问题中描述的方式标记数组块,则数组中包含的对象必须是具有所需字段的对象;在您的情况下,a必须是包含namecountry字段的对象数组。你使你的数组​​成为int数组,而ints是基元,它们没有任何字段;因此,编译器无法弄清楚a[i][k].visited的含义,因此会给您一个错误。

如果你有一个标志(visited在你的情况下),一个可能的选择是保持第二个数组,只是标记是否已访问该位置,但这可能不是最有效的方式这样做。

答案 2 :(得分:1)

为此,数组需要收集Object而不是primitive types

int a[][] = new int[5][5];

a[i][k].visited = false;

显然你不能这样做。

但是呢?

MyClass mc[][]=new MyClass[5][5];

您可以访问Visited,该boolean是该类对象中声明的class MyClass { public boolean Visited; public MyClass(boolean b) { Visited=b; } } mc[0][0]=new MyClass(true); //Then, access that variable mc[0][0].Visited=false;

a[0][0]----->Say 5
a[0][0].Visited=false-------> 5.Visited=false;(OOppss!!! Dosen't make any sense.)

注意:您不能将任何变量与原始值相关联,因为它不是世界闻名的对象

你要做的是

{{1}}

答案 3 :(得分:1)

首先,a[i][k].visited无法执行。因为您尝试使用2d数组对象访问访问。和2d对象是一个int数组对象,它没有visited与它

如果您想要访问它,任何内容都必须在该对象中可用。

所以定义一个应该访问boolean的类。

创建一个这样的类

class Matrix{

boolean visited;
}

然后你可以使用像

Matrix m[][] = new Matrix[10][10];

and set m[0][0].visited = true

答案 4 :(得分:0)

您无法声明int数组,并希望它包含一个名为visited的变量。您需要创建一个对象数组。

MyClass[][] myClassArray = new MyClass[5][5]; \\每个索引都引用MyClass实例

并且您的MyClass定义应该声明变量visited

class MyClass{

public boolean visited;    

}