Arrays 处理:数组索引超出范围
我不熟悉处理,正在创建一个草图,其中600px x x 600px的画布填充了我的Arrays 处理:数组索引超出范围,arrays,processing,indexoutofboundsexception,Arrays,Processing,Indexoutofboundsexception,我不熟悉处理,正在创建一个草图,其中600px x x 600px的画布填充了我的orange[]调色板中随机颜色的50px矩形。块的随机形成需要位于draw()函数的内部,以便正确地使用我将在后面输入的一些条件进行操作 我得到的错误是ArrayIndexOutOfBoundsException:12在这一行: randomSize[varCreator] = sIncrement[int(random(0,sIncrement.length-1))]; 我似乎不明白为什么会发生这种错误。我已
orange[]
调色板中随机颜色的50px矩形。块的随机形成需要位于draw()
函数的内部,以便正确地使用我将在后面输入的一些条件进行操作
我得到的错误是ArrayIndexOutOfBoundsException:12在这一行:
randomSize[varCreator] = sIncrement[int(random(0,sIncrement.length-1))];
我似乎不明白为什么会发生这种错误。我已经研究过相关的问题,也许这只是因为我太新了,但我无法理解:
int x; //x coordinate
int y; //y coordinat
int s = 50; //rect size
int wide = 600; //canvas width
int tall = 600; //canvas height
int[] sIncrement = new int[12];//{s, s*2, s*3, s*4, s*5, s*6};
//colors
int[] oranges = {
#773600, #5f3613, #552700, #9c5215, #9c5c26
};
int[] blues = {
#004848, #0c3939, #003333, #107979, #1e7979
};
int[] palette = oranges;//holds current color pallete
//random
int fillColor = palette[int(random(0, palette.length))]; //random starting fill color
int changeColor = palette[int(random(0, palette.length))]; //random new color
int[] randomSize = new int[sIncrement.length]; //array of lots of random s values to place newly color changed blocks
//setup
void setup(){
size(wide, tall);
background(255);
noStroke();
frameRate(24);
/*fills sIncrement array with incrementing s values (i.e. if s = 50 then array
contains 50, 100, 150, etc...) from 0 to canvas width for use in a conditional statement*/
for(int i = 0; i <= sIncrement.length-1; i++){
sIncrement[i] = s*i;
}
//creates multiple randomSize variables for if() x or y == randomSize[varCreator]
for(int varCreator = 0; varCreator <= (width/s)+(height/s); varCreator++){
randomSize[varCreator] = sIncrement[int(random(0,sIncrement.length-1))];
}
}
//draw
void draw(){
fill(fillColor); //selects random color from palette
//draws grid colored boxes with s size
for (y = 0; y <= height; y+= s) {
for (x = 0; x <= width; x+= s) {
if(x == sIncrement[randomSize[1]] && y == sIncrement[randomSize[3]]){
fill(changeColor); //selects random color from palette
rect(x, y, s, s);
}
else{
fill(fillColor);
// fill(palette[int(random(0, palette.length))]); //selects random color from palette
rect(x, y, s, s);
}
}
}
}
intx//x坐标
int-y//y坐标
int s=50//矩形大小
int宽=600//画布宽度
int高=600//帆布高度
int[]sIncrement=新的int[12]//{s,s*2,s*3,s*4,s*5,s*6};
//颜色
int[]橙子={
#773600、5f3613、552700、9c5215、9c5c26
};
int[]蓝色={
#004848、0c3939、003333、107979、1e7979
};
int[]调色板=橘子//保存当前颜色托盘
//随机的
int fillColor=palete[int(随机(0,palete.length))]//随机起始填充颜色
int changeColor=palete[int(随机(0,palete.length))]//随机新颜色
int[]randomSize=新int[sIncrement.length]//大量随机s值的数组,用于放置新更改的颜色块
//设置
无效设置(){
尺寸(宽、高);
背景(255);
仰泳();
帧率(24);
/*用递增的s值填充增量数组(即,如果s=50,则为数组
包含从0到画布宽度的50、100、150等,用于条件语句*/
对于(int i=0;i通过代码进行跟踪,您有:
int[] sIncrement = new int[12]; // sIncrement initialized with size 12
int[] randomSize = new int[sIncrement.length]; // randomSize initialized with size 12
for(... ; varCreator <= (width/s)+(height/s); ...) // varcreator <= 24!
randomSize[varCreator] = ... // Problem line
int[]sIncrement=new int[12];//sIncrement初始化为大小12
int[]randomSize=new int[sIncrement.length];//使用大小12初始化randomSize
对于(…;varCreator您正在访问数组的元素randomSize
。这个数组有多长?让我们看看它的声明:
int[] randomSize = new int[sIncrement.length];
因此,它的长度与数组sIncrement
的长度相同
int[] sIncrement = new int[12];
sIncrement
的长度,因此randomSize
的长度是12
在此代码中:
for(int varCreator = 0; varCreator <= (width/s)+(height/s); varCreator++){
randomSize[varCreator] = sIncrement[int(random(0,sIncrement.length-1))];
}
用于(int varCreator=0;varCreator这似乎不是Java。即使如此……我也不确定错误消息的哪一部分确切地告诉您问题所在……令人困惑。@OMGPonies,因为这正是问题所在!@BrianRoach我刚刚意识到我的错误所在。我已经看了很长时间了,如果我浪费了你几秒钟的时间。非常感谢你的详细描述!