如何通过keyPressed()更改数组的单元格?

时间:2018-11-27 08:58:04

标签: processing processing.js

我尝试制作一个Web应用程序。 您可以通过按箭头键here来更改数组的单元格。 有一个类“模块”,具有方法display()和update()。这些方法会更改内部数组数据[]。

class Module {
    int i; // index
    int x; // coordinate 
    int y; // coordinate 
    int[] data = new int[]{0,0,0,0,0};

    // Contructor
    Module(int x){
        this.x = x;
    }

    void update() {
        data[i]=_mas_stor;
    } 

    void display(){
        text(data[i], x, 100);
    }
} 

但是如何在程序开始时设置数组_mass[]的初始值?

整个程序here

2 个答案:

答案 0 :(得分:1)

data中不需要Module数组。每个对象都具有单个数据成员就足够了。使用构造函数,可以将其传递给初始数据(Module(int x, int d)):

class Module {
    int i;
    int x;
    int y;
    int data;
    // Contructor
    Module(int x, int d){
        this.x = x;
        this.data = d;
    }
    void update() {
        data=_mas[global_i];
    }    
    void display(){
        textSize(30);
        text(data, x, 100);
    }
}

现在可以轻松地在循环中初始化对象了:

int[] _mas ={1,2,3,4,5};
int global_i = 0;
Module [] mods;

void setup() {
    size(500, 400);
    mods = new Module[5];
    for (int i = 0; i < 5; ++ i ) {
        mods[i] = new Module(i*50+50, _mas[i]);
    }
}

此外,您还必须确保global_i不会超出keyPressed的范围:

void keyPressed() {
    if (keyCode == UP) {
        _mas[global_i]++;
    } 
    if (keyCode == DOWN) {
        _mas[global_i]--;
    }
    if (keyCode == LEFT) {
        global_i--; 
        if (global_i < 0)
            global_i = 4;
    } 
    if (keyCode == RIGHT) {
        global_i++;
        if (global_i > 4)
            global_i = 0;
    } 
}

请注意,如果您跳过全局变量_mas,并且将增量方法(inc)和减量方法(dec)添加到类{{ 1}},而不是Module方法:

update

答案 1 :(得分:0)

通常,您可以使用for循环来设置数组的初始值。像这样:

String myArray = new String[10];
for(int i = 0; i < myArray.length; i++){
  myArray[i] = "hello world";
}

放在for循环中的内容取决于希望数组以什么值开头。