在处理中使2D数组大于100x100 3

时间:2018-09-28 14:32:22

标签: arrays processing

所以我才刚进入uni的第一周,他们就一直把我们带入“编码训练营”,以使每个人都掌握最新知识,并确保他们了解基本知识。在训练营的最后,我们应该炫耀一个项目,展示我们的知识和所学到的东西。我们已经得到了建议的事情清单,我们可以做些什么,我决定根据the amazing, autotuning sandpiles进行挖掘。

要做到这一点,我认为我可以制作2D的谷物阵列,然后让我沿着其轮廓模拟流沙:

for(int i=0; i<cols; i++){ //for every column in the array
  for(int j=0; i<rows; j++){ //for every row in the array
    if(grain[i][j].value>=4){ //if the grains of sand on that square are greater than 4
      grain[i][j-1].value=grain[i][j-1].value+1; //add a grain to the square above
      grain[i+1][j].value=grain[i+1][j].value+1; //"                       " to the right
      grain[i][j+1].value=grain[i][j+1].value+1; //"                       " below
      grain[i-1][j].value=grain[i-1][j].value+1; //"                       " to the left
    }
  }
}

这不是我有问题的代码,尽管所有指针都不会出错,但这只是为了显示我要做什么的要旨。

此刻我所得到的如下
沙粒类:

class Grain{
  PVector position;
  float size;
  int value;
  color colour;

  Grain(float x, float y){
    position = new PVector(x,y);
    size = 5;
    value = 0;
    colour = color(grain0);
  }

  void draw(){
    stroke(0);
    fill(colour);
    rect(position.x,position.y,size,size);
  }
}

然后是代码主体:

color grain0 = color(255);
color grain1 = color(255,0,0);
color grain2 = color(0,255,0);
color grain3 = color(0,0,255);
Grain[][] grain;
int cols = width;
int rows = height;

void setup(){
  size(600,600);
  grain = new Grain[cols][rows];
  for(int i=0; i<cols; i++){
    for(int j=0; j<rows; j++){
      grain[i][j] = new Grain(5*i,5*j);
    }
  }
  println(cols, rows);
}

void draw(){
  background(255);
  for(int i=0; i<cols; i++){
    for(int j=0; j<rows; j++){
      grain[i][j].draw();
    }
  }
}

我的问题源于以下事实:无论我做什么,尽管声明数组应该为widthxheight,但数组似乎都不会大于100x100。这是内置的处理限制,还是我缺少某些步骤?我看过其他地方,但是找不到任何与我的问题匹配的东西。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

size()上的documention说:“如果不使用size(),则窗口的默认大小为100 x 100像素。”

行时尚未调用size()
int cols = width;
int rows = height;

所以您只是分配这些默认值。

最简单的解决方法是摆脱这些变量并保持一行

grain = new Grain[width][height];
setup()

。确实不需要widthheight的别名。至少,您应该将colsrows的分配推迟到调用size()之后。