2017-01-25 3 views
-1

코드Nested for-loops stalling program?

1/26 그래서 내가 이론적으로 간단한 듯 학생들에게 문제를 내놓았다 업데이트되었습니다. 그러나 조금 당황 스럽지만 작업을 만들 수는 없습니다. 그래서 몇 가지 광범위한 문제 해결 및 조사를 수행했으며 전화를 찾은 것 같지만 해결 방법은 찾지 못했습니다.

ProcessingJS를 사용하고 있습니다. 어떤 상황에서 for 루프가 안에 있고 다른 배열을 통해 또 다른 for-loop 검색을하고있는 것 같습니다. 내 프로그램이 끊깁니다. 그것은 충돌하지 않으며 단지 ... 아무것도하지 않습니다. 그것은 아무것도하지 않는 창을 만듭니다.
파일의 문서를보고 각 문자와 문자의 인스턴스 수를 식별하는 프로그램을 만드는 작업입니다.
내 코드에 for-loops가 중첩되어 있습니다. 첫 번째 루프는 내 파일의 첫 번째 줄 내용을 통과합니다. 두 번째 루프는 첫 번째 루프의 결과를 사용하고 배열을 통해 해당 문자의 '인스턴스'가 이미 발견되었는지 확인합니다. 찾지 못하면 추가합니다. 문자의 인스턴스가 발견되면 두 번째 배열에있는 숫자 값이 증가합니다.
파일의 내용은 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 !!!!!!!!!!!!!!! 

:
다음은 내 코드입니다. 이렇게하려고 할 때 어떤 종류의 메모리 문제가 생기고 있는지 궁금합니다. 그게 그렇게 힘든 시스템에 영향을 미치지 않을 것 같기 때문에 나는 확실하지 않지만, 솔직히 다른 추론을 가지고 있지 않습니다.

지금까지 제공된 다른 대답은 다른 버전의 코드입니다. 그 도움이되는 조언을 나는 그 일을 얻을 수 있었다, 그러나이 코드의 문제는 여전히 남아있다 :(

사람은 내 문제는 당신이 대신 난을 증가거야?

+0

다른 부분을 주석 처리하려고 했으므로 먼저 for 루프 전체를 주석 처리하려고 시도하여 프로그램이 작동하지 않게 한 다음 조각을 다시 도입하기 시작했습니다. 루프를 다시 도입했을 때 루프가 잘 돌아갔습니다. 두 번째 for 루프에서 주석을 제거 할 때까지는 문제가 발생하지 않았습니다. ( 그래서 for-loop 자체로 무언가가 깨지거나 배열을보고 다른 배열을 조사하기 위해 해당 데이터를 사용하는 것이 처리를 위해 너무 많은지 궁금합니다. – rahtas

답변

3

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

무엇인지 설명 할 수 r이 루프에서.

+0

아 ... 음 .. 그거 ... 음 ... 나는 바보 야. 고맙습니다! :) – rahtas