【问题标题】:Android Development : Don't understand for each loop with 2d arrayAndroid 开发:不了解二维数组的每个循环
【发布时间】:2016-04-08 20:42:08
【问题描述】:

我在创建一个简单的井字游戏的教程中遇到了这段代码。完整代码可见here

这个 for 循环和 if 有什么作用?当 for 循环循环时,[0],[1],[2] 是否会自增?如果将 2d 数组转换为 1d 数组,它会是什么样子?是否保持相同的位置?

例如

int[][] winningStates = {{0,1,2},{3,4,5},{6,7,8},{0,3,6},{1,4,7},{2,5,8},{0,4,8},{2,4,6}}; 

如果转换成一维数组会是这样吗?:

{0,1,2,3,4,5,6,7,8,0,3,6,1,4,7,2,5,8,0,4,8,2,4,6};

int[] gameState = {2,2,2,2,2,2,2,2,2};
int[][] winningStates = {{0,1,2},{3,4,5},{6,7,8},{0,3,6},{1,4,7},{2,5,8},{0,4,8},{2,4,6}};
boolean gameIsActive = true;

for(int[] winningState : winningStates){
            if(gameState[winningState[0]] == gameState[winningState[1]] &&
                    gameState[winningState[1]] == gameState[winningState[2]] &&
                    gameState[winningState[0]] != 2){
                gameIsActive = false;
                String winner = "Black";

                if(gameState[winningState[0]] == 0){
                    winner = "Red";
                }
                //someone has won!
                playAgainMessage again = new playAgainMessage();
                again.playAgainMethod(winner + " has Won !!");
            }

【问题讨论】:

  • 太棒了!但是,问题是什么?
  • 问题在代码注释中。
  • 很抱歉造成混乱,已被编辑。

标签: java android arrays if-statement for-loop


【解决方案1】:

不,for 循环将为winningState 生成以下值(它在数组数组中迭代):

{0,1,2} -> winningState[0] = 0, winningState[1] = 1, winningState[2] = 2
{3,4,5} -> winningState[0] = 3, winningState[1] = 4, winningState[2] = 5
{6,7,8}
{0,3,6} -> winningState[0] = 0, winningState[1] = 3, winningState[2] = 6
{1,4,7}
{2,5,8}
{0,4,8}
{2,4,6}

【讨论】:

  • 感谢您的回答,解决了我的一些困惑,但是,我们不是将二维数组转换为一维数组吗?
  • 你可以这么说,但是 2D->1D(或更一般的,nD->1D)意味着使它像显示的那样线性化 here
猜你喜欢
  • 1970-01-01
  • 2012-11-03
  • 2011-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多