我不确定标题是否与我的问题正确相关,请随时修改! :)
我要做的是,访问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;
}
}
答案 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
表示array
是String
个对象的数组,因此如果您执行array[i]
,您可以执行的方法是您可以在String
上执行的方法对象。
因此,如果要以问题中描述的方式标记数组块,则数组中包含的对象必须是具有所需字段的对象;在您的情况下,a
必须是包含name
和country
字段的对象数组。你使你的数组成为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;
}