首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >3d数组出了什么问题

3d数组出了什么问题
EN

Stack Overflow用户
提问于 2012-12-10 22:23:17
回答 1查看 104关注 0票数 2

我有一个代表tic脚趾板的2d数组。而空框只是"“;我当前的游戏板保存在ar1中,这是2d字符串数组。我想做一个棋盘数组,它是2d数组= 3d数组。所以我想应该是这样的:

代码语言:javascript
复制
String[][][]ar3 = new String[80][9][9]; // array of game boards

        for(int k=0;k<ar3.length;k++)// filling the array with the current game board
        {
            ar3[k] = ar1;
        }

是的,我想要80个棋盘,游戏是9x9。直到现在一切都很好..。但是现在我想看看游戏板(Ar1),并在ar3上做每一个可能的动作。所以,对于每一个可能的举动,我在ar3上都有一个板。为此,我将创建一个数组,该数组将包含板上的空索引,这是ar2上的每一个可能的动作:

代码语言:javascript
复制
int[][]ar2 = new int[81][2]; // contains blank boxes indexes
        int line = 0;

        for(int k=0;k<SIZE;k++) //finds blank boxes indexes and adding to the array
            for(int j=0;j<SIZE;j++,line++)
            {
                if(ar1[k][j].equals(""))
                {
                    ar2[line][0] = k;
                    ar2[line][1] = j;
                }
                else
                {
                    ar2[line][0] = -1;
                    ar2[line][1] = -1;
                }

            }

如您所见,如果盒子中有其他东西,即“X”或“O”,那么我把-1这段代码做我想做的事情,但是现在出现了一个问题,我将尝试生成存储在ar2中的ar3中的所有可能的动作:

代码语言:javascript
复制
String[][][]ar3 = new String[80][9][9]; // array of game boards

        for(int k=0;k<ar3.length;k++)// filling the array with the current game board
        {
            ar3[k] = ar1;
        }
        for(int k=0;k<ar3.length;k++)// making a move
        {
            int i1 = ar2[k][0];
            int i2 = ar2[k][1];
            if(!(i1 == -1 || i2 == -1))
                if(num%2==0)
                    ar3[k][i1][i2] = "X";
                else
                    ar3[k][i1][i2] = "O";
        }

我不知道为什么不是为每个板块做一个移动,而是对ar3中的每个索引进行所有的移动。例如,(我将在3x3板上演示)^的意思是在如下所示之前清空板:

^^ ^X^ ^^

但是在“移动”之后,我想让(比如说,0,0)所有的板看起来都是这样的:

O^^ ^X^ ^^

而不是前一个..。然后,我对第二个板(ar31)的不同索引做了同样的事情,但是它影响了所有的板。(第30-k条)所以我最终得到了80个相同的板。有人有主意吗?为什么它改变了所有的董事会?而只是一个K指数?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-10 22:36:04

我不确定我是否完全理解了代码,所以这是一个疯狂的猜测,但是:

在第一个节选中,您将为ar3中的所有插槽提供对同一个对象ar1的引用。这意味着如果您更改ar1的内容,您将看到跨所有ar3项的更改,因为所有这些项都是对同一个对象的引用,您可以检查这是否是您的问题。

现在,作为一个评论,我建议您开始做两件事,在这些情况下对我个人有帮助:第一种是尽可能给您的标识符以有意义的名称,所以不需要注释来真正理解什么是什么。第二种方法是利用这样一个事实,即您正在使用Java这样的语言编写代码,并尝试以一种更面向对象的方式编写代码。例如,如果您有一个正常的(例如) GameBoard对象数组而不是一个3D数组,每个对象都包含其2D信息,那么它在使任何“可疑”代码模式(不符合您的实际意图,也就是)更加明显方面可能会产生非常积极的效果。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13810320

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档