了解数组访问(处理)

时间:2011-10-18 09:32:27

标签: java arrays processing

嗨,任何人都可以帮我理解Langton蚂蚁素描中的这段特殊代码。

antLoc = new int[]{rows/2,columns/2};

我并不完全理解这里实际发生了什么,这里是上下文的其余代码。 (最初来自这里http://www.openprocessing.org/visuals/?visualID=13653

boolean[][] state;
int[] antLoc;
int antDirection;

int squareSize = 5;
int columns, rows;

color bgCol = color(0,128,128);
color antCol = color (255,0,0);
color sqCol = color(128,128,128);

void setup(){
  size(800,600);
  background(bgCol);
  columns = width/squareSize;
  rows = height/squareSize;

  state = new boolean[rows][columns];
  for(int j = 0; j < rows; j++){
    for(int i = 0; i < columns; i++){
      state[j][i] = false;
    }
  }
  antLoc = new int[]{rows/2,columns/2};
  antDirection = 1;
}

void drawScene(){
  fill(sqCol);
  for(int j = 0; j < rows; j++){
    for(int i = 0; i < columns; i++){
      if(state[j][i]){
        rect(i*squareSize,j*squareSize,squareSize,squareSize);
      }
    }
  }
  fill(antCol);
  rect(antLoc[1]*squareSize,antLoc[0]*squareSize,squareSize,squareSize);
}

void turnLeft(){
  if (antDirection > 1){
    antDirection--;
  } else{
    antDirection = 4;
  }
}

void turnRight(){
  if (antDirection < 4){
    antDirection++;
  } else {
    antDirection = 1;
  }
}

void moveForward(){
  if (antDirection == 1){
    antLoc[0]--;
  }
  if (antDirection == 2){
    antLoc[1]++;
  }
  if (antDirection == 3){
    antLoc[0]++;
  }
  if (antDirection == 4){
    antLoc[1]--;
  }
}

void updateScene(){
  moveForward();
  if (state[antLoc[0]][antLoc[1]] == false){
    state[antLoc[0]][antLoc[1]] = true;
    turnRight();
  } else {
    state[antLoc[0]][antLoc[1]] = false;
    turnLeft();
  }
}

void draw(){
  background(bgCol);
  drawScene();
  for(int i = 0; i < 10; i++){
      updateScene();
  }

}

2 个答案:

答案 0 :(得分:1)

您的代码创建一个长度为2的int的新数组,并使用给定的表达式初始化元素。它相当于:

antLoc = new int[2];
antLoc[0] = rows/2;
antLoc[1] = columns/2;

答案 1 :(得分:1)

你提到的那句话:

antLoc = new int[]{rows/2,columns/2};

大致类似于:

antLoc = new int[2];
antLoc[0] = rows / 2;
antLoc[1] = columns / 2;

为方便起见,这只是句法简写。