Problemas con keyPressed en el Procesamiento

wordcounter:

Soy nuevo en el procesamiento y estoy teniendo algunos problemas. Estoy trabajando en una visualización de datos de frecuencia de la palabra en un texto, que se muestra a través de un gráfico de barras.

Para el código de ejemplo, he sustituido mi texto con una secuencia de 200 números aleatorios: los rollos de gráfico de barras al presionar hacia arriba y abajo en el teclado mientras que la otra mitad de la pantalla se supone que muestra uno de los 200 números elegidos al azar cada vez que la llave R es presionado o un texto diciendo “Hola” cuando se pulsa H.

Con un poco de ayuda pude tener mis números correctamente se muestra en la pantalla pero no estoy seguro de cómo hacer este trabajo con dos interacciones keyPressed diferentes que necesito para hacer malabares entre: número aleatorio y texto.

He intentado como este, pero me parece que no puede hacer este trabajo para la parte del texto:


String numbers[];
String randomnumber;
String h;

//PANNING VARIABLES
float yPan = 0;
boolean panUp = false;
boolean panDown = false;

void setup() {
  fullScreen();
  smooth(2);
  concordance = new IntDict();

  String numberString = "74,34,62,41,81,11,36,76,37,14,54,57,50,57,95,35,82,100,49,67,48,18,11,97,14,41,85,53,80,72,61,91,93,67,72,73,72,20,32,45,62,9,36,70,99,47,6,98,36,26,65,32,75,8,93,71,72,55,95,7,1,36,93,9,21,100,43,22,30,58,21,4,9,4,35,12,57,26,3,90,16,65,36,11,67,4,22,14,63,89,45,10,51,60,3,32,12,41,83,37,100,91,74,76,73,69,6,22,26,100,59,16,24,30,41,77,79,91,86,37,88,26,10,49,32,95,79,50,46,49,45,58,74,22,53,44,82,61,60,61,73,31,41,5,94,38,48,5,90,77,91,6,45,11,1,16,13,23,10,52,45,8,48,16,96,24,61,25,59,40,44,6,13,51,88,42,62,43,94,8,24,47,96,71,10,30,22,68,54,87,70,45,8,78,77,81,24,7,21,7";
  String[] numbers = splitTokens(numberString, ",");

  //FREQUENCY COUNT
  for (int i = 0; i < numbers.length; i++) {
    String s=(numbers[i].toLowerCase());
    concordance.increment(s);
  }
}


void draw() {
  background(0);

  concordance.sortValuesReverse();
  String[] keys = concordance.keyArray();
  for (int i = 0; i < keys.length; i++) {
    String num = keys[i];
    int frequency = concordance.get(num);

    //DRAW GRAPH
    fill(255);
    rect(35, (((i*13)+9)+(yPan)), (frequency*2.2), 6);

    fill(255);
    textAlign(RIGHT);
    textSize(13);
    text(frequency, 30, ((i*13)+16)+(yPan));

    fill(255);
    textAlign(LEFT);
    text(num, (frequency*2.2)+40, ((i*13)+16)+(yPan));
  }
  if (randomnumber!=null) {
    fill(0);
    rect(width/2, 0, width/2, height);

    fill(255);
    textAlign(TOP);
    textSize(60);
    text (randomnumber, width/2+10, 9, width/2, height);
  }

  if (h!=null) {
    fill(0);
    rect(width/2, 0, width/2, height);

    fill(255);
    textAlign(TOP);
    textSize(60);
    text (h, width/2+30, 9, width/2, height);
  }
}

void keyPressed() {

  //SCROLL GRAPH
  if (keyCode == UP) {
    if (panUp) {
      yPan +=35;
    }
    panUp = true;
    panDown = false;
  }

  if (keyCode == DOWN) {
    if (panDown) {
      yPan -=35;
    }
    panUp=false;
    panDown = true;

    //PICK AND SHOW A RANDOM NUMBER WHEN R IS PRESSED
  } else if (key == 'R' || key == 'r') { 
    String numberString = "74,34,62,41,81,11,36,76,37,14,54,57,50,57,95,35,82,100,49,67,48,18,11,97,14,41,85,53,80,72,61,91,93,67,72,73,72,20,32,45,62,9,36,70,99,47,6,98,36,26,65,32,75,8,93,71,72,55,95,7,1,36,93,9,21,100,43,22,30,58,21,4,9,4,35,12,57,26,3,90,16,65,36,11,67,4,22,14,63,89,45,10,51,60,3,32,12,41,83,37,100,91,74,76,73,69,6,22,26,100,59,16,24,30,41,77,79,91,86,37,88,26,10,49,32,95,79,50,46,49,45,58,74,22,53,44,82,61,60,61,73,31,41,5,94,38,48,5,90,77,91,6,45,11,1,16,13,23,10,52,45,8,48,16,96,24,61,25,59,40,44,6,13,51,88,42,62,43,94,8,24,47,96,71,10,30,22,68,54,87,70,45,8,78,77,81,24,7,21,7";
    String[] numbers = splitTokens(numberString, ",");

    int index = int(random(numbers.length));
    randomnumber = numbers[index];

  } else if (key == 'H' || key == 'h') { 
    String h = "hello there";
  }
}
vs97:

Usted fue muy cerca.

Ante todo:

  } else if (key == 'H' || key == 'h') { 
    // String h = "hello there"; -> delete this
    h = "hello there";
  }

Antes, cuando se pulsaba la tecla "h", que estaban creando una nueva h objeto String, que luego no llegar a ninguna parte usada. Eliminar el Stringfrente de h.

A continuación, la primera vez que ha pulsado R y H, y luego R vez más, la razón por la que todavía viste el texto se debía a que el valor de h no era nulo, y por lo tanto el resultado de sobrescribieron R. Para solucionar este problema, se inicializan a null el valor que desea dibujar sobre cada vez que pulse un botón:

  } else if (key == 'R' || key == 'r') { 
    //initialize h string to null
    if (h != null) {
      h = null;  
    }

    String numberString = "74,34...";
    String[] numbers = splitTokens(numberString, ",");

    int index = int(random(numbers.length));
    randomnumber = numbers[index];

  } else if (key == 'H' || key == 'h') { 
    //initialize random number to null
    if (randomnumber != null) {
      randomnumber = null;  
    }

    h = "hello there";
  }

introducir descripción de la imagen aquí

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=235956&siteId=1
Recomendado
Clasificación