我正在尝试编写一种笨拙的程序。我成功地在屏幕上生成了一些随机文本。现在,我想将网格的每个部分链接到一个字母。坐标不在ATM上,但问题是当我在区域x< = 50中单击时;y< = 50 i获得无效的值,而我的数组的元素不断绘制,所以它不能为空?
boolean clicked = false;
boolean Gen = true;
void setup() {
size(1000,1000);
textSize(64);
textAlign(CENTER);
}
void draw() {
String [] Storage = new String[17];
int x1 = 5;
int x2 = 5;
int x3 = 5;
int x4 = 5;
if(Gen) {
background(#AFA3A3);
// Loop for Storing
for(int i = 0; i < 17; i = i+1) {
String a;
a = genereren();
Storage[i]=a;
}
//Loop for Reading
//First Row
for(int j = 0; j < 4; j = j+1) {
text(Storage[j], 80+(x1*10), 125);
x1 = x1 +12;
}
//Second Row
for(int k = 4; k < 8; k = k+1) {
text(Storage[k], 80+(x2*10), 250);
x2 = x2 +12;
}
//Thrid Row
for(int c = 8; c < 12; c = c+1) {
text(Storage[c], 80+(x3*10), 375);
x3 = x3 +12;
}
//Fourth Row
for(int o = 12; o < 16; o = o+1) {
text(Storage[o], 80+(x4*10), 500);
x4 = x4 +12;
}
}
Gen = false;
for(int i=50; i<500;i=i+125){
noFill();
strokeWeight(5);
rect(i,50,125,125);
rect(i,175,125,125);
rect(i,300,125,125);
rect(i,425,125,125);
}
if(clicked==true && mouseX <= 50 && mouseY <= 50) {
text(Storage[1], 500,500);
}
Reset();
}
//draw
public String genereren() {
String alfabet = "abcdefghijklmnopqrstuvwxyz";
float r = random(24);
if(r < 1) {
r = r+1;
}
int d = int(r);
String EersteLetter;
EersteLetter = alfabet.substring(d-1,d);
return EersteLetter;
}
public void Store() {
}
public void mouseClicked() {
clicked = true;
}
public void Reset() {
clicked = false;
}
发布代码时,请使用理智的格式和标准命名约定(存储应该是存储等)。
无论如何,您正在初始化绘制功能中的存储变量,这意味着您每秒创建了60倍的新空数组。但是,您只会在Gen为True时才填充该数组,这仅发生在第一次绘制()。
。这意味着在稍后呼叫draw()函数中,存储为空白,这意味着它包含所有空值。然后,当您单击左上角时,它将null值传递到text()函数中,这会导致NPE。
大多数处理草图都会呼叫Boundkfork()作为draw()函数中的第一行。添加它,您会发现您实际上并未在随后呼叫的draw()函数中填充数组。您可能想在setup()函数中填充它,然后每次draw()绘制它。