嵌套for循环停止程序?

时间:2017-01-25 22:22:15

标签: for-loop processing freeze processing.js

代码已更新1/26

所以我为我的学生提出了一个理论上似乎很简单的问题。但是,有点令人尴尬的是,我无法为它创建工作解决方案。 所以,我做了一些广泛的故障排除和研究,我认为我已经找到了挂断,但不是如何解决它。

我们正在使用ProcessingJS。似乎在任何情况下,我有一个for循环运行数组里面另一个for循环搜索通过一个不同的数组,我的程序挂起。它没有崩溃,它只是......什么都不做。它创建了一个不做任何事情的窗口 任务是创建一个程序,查看文件的文档,并确定每个字母和字符有多少个实例 我的代码嵌套了for循环。第一个循环遍历我文件中第一行的内容。第二个循环使用第一个循环的结果并查看数组以查看是否已找到该字母的任何“实例”。如果没有找到它,它会附加它。如果找到了字母HAS的实例,则它会增加第二个数组中的数字值 该文件的内容为4行,每行包含由逗号分隔的数百个单词 这是我的代码:

//!!!!!!!!!!Declare Variables!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

String exampleTXT[] = loadStrings("sounds.txt");

//String [][] results = {{"null", "null"}};

String [] resultsAlpha = {"null"};
int[] resultsNumber = {0};

boolean analyze = true;


//
//!!!!!!!!!!!Void Setup!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
//
void setup() {
  println("hey 1");    
  size(800, 800);
  println("hey 2");
}
//!!!!!!!!!!!End of Void Setup!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
//


//
//!!!!!!!!!!!Void Draw!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
//
//
//
void draw() {
  println("hey 3");
  background(0);
  println("hey 4");
  fill(0, 255, 0);
  println("hey 5");
  textAlign(LEFT, TOP);
  println("hey 6");

  //nothing to see on this line

  println("hey 7");
  if (analyze == true) {
    println("hey 8");
    for (int i = 0; i < exampleTXT[0].length(); i++) {
      println("hey 9");        
      for ( int r = 0; r < resultsAlpha.length(); r++) {
        println("hey 10");          
        if (exampleTXT[0][i] != resultsAlpha[r]) {
          println("hey 11");           
          resultsAlpha = append(resultsAlpha, exampleTXT[0][i]);
          println("hey 12");          
          resultsNumber = append(resultsNumber, 0);
          println("hey 13");
        }
        println("hey 14");       
        if ( exampleTXT[0][i] == resultsAlpha[r]) {
          println("hey 15");       
          resultsNumber[r]++;
          println("hey 16");
        }
        println("hey 17");
      }
      println("hey 18");
    }
    println("hey 19");       
    analyze = false;
    println("hey 20");
  }
  println("hey 21");       


  for (int i = 0; i<resultsAlpha.length(); i++) {
    println("hey 22"); 
    text(resultsAlpha[i] + " " + resultsNumber[i], 0, 10*i);
    println("hey 23");
  }
  println("hey 24"); 
  if (frameCount%60==0) {
    println("hey 25"); 
    println(frameCount / 60);
    println("hey 26");
  }
  println("hey 27");
}
//!!!!!!!!!!!End of Void Draw!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
//


//
//!!!!!!!!!!!Void KeyPressed!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
//
//
//
void keyPressed() {

  if (key == DELETE) {
    println(exampleTXT[0]);
  }
  if (keyCode == UP) {
    println(resultsNumber);
  }

  //
  // Break your code up into logical sections with comments!
  //
}

//!!!!!!!!  End of Void keyPressed  !!!!!!!!!!!!!!!

这就是我正在使用的东西。我想知道是否可能在尝试这样做时遇到某种内存问题。不过,我不确定,因为这似乎不会对系统造成太大的影响,但坦率地说,我没有任何其他推理。

到目前为止提供的一个答案是另一个版本的代码。有了这个有用的建议,我能够让它工作,但这段代码的问题仍然存在:(

有谁可以解释我的问题是什么?

1 个答案:

答案 0 :(得分:3)

for (int r = 0; r < numbers.length; i++){

你在这个循环中递增i而不是r。