Как изменить ячейки массива с помощью keyPressed ()? - PullRequest
0 голосов
/ 27 ноября 2018

Я пытаюсь сделать веб-приложение.Вы можете изменить ячейки массива, нажав клавиши со стрелками здесь .Есть класс «Модуль» с методами 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[] в начале программы?

Вся программа здесь .

Ответы [ 2 ]

0 голосов
/ 27 ноября 2018

Нет необходимости в массиве 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) к классу Module вместо метода update:

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, i);
    }
}

void draw() {
    background(50);
    for (int i = 0; i < 5; ++ i ) {
        mods[i].display();
    }
}

void keyPressed() {
    if (keyCode == UP) {
        println("up");
        mods[global_i].inc();
    } 
    if (keyCode == DOWN) {
        mods[global_i].dec();
    }
    if (keyCode == LEFT) {
        global_i--; 
        if (global_i < 0)
            global_i = 4;
    } 
    if (keyCode == RIGHT) {
        global_i++;
        if (global_i > 4)
            global_i = 0;
    } 
}

class Module {
    int i;
    int x;
    int y;
    int data;
    // Contructor
    Module(int x, int d){
        this.x = x;
        this.data = d;
    }   
    void inc() {
        this.data ++;
    }
    void dec() {
        this.data --;
    }
    void display(){
        textSize(30);
        text(data, x, 100);
    }
}
0 голосов
/ 27 ноября 2018

Обычно вы устанавливаете начальное значение массива, используя цикл for.Примерно так:

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

То, что вы помещаете в цикл for, зависит от того, с каких значений вы хотите, чтобы ваш массив начинался.

...