2014-03-04 39 views
1

這裏是我的代碼http://pastebin.com/itL26LW6http://pastebin.com/index/fvx3Tc65製作BrainF * CK翻譯,麻煩循環

具體而言,這是應該控制[和]

case Token.LEFT: 
        if (tape[datapointer] == 0){ 
          int i =1; 
          while (i > 0) { 
            char c2 = (char) c[++charpointer]; 
            if (c2 == Token.LEFT) 
              i++; 
            else if (c2 == Token.RIGHT) 
              i--; 
          } 
        } 
        break; 
      case Token.RIGHT: 
        int i = 1; 
        while (i > 0) { 
          char c2 = (char) c[--charpointer]; 
          if (c2 == Token.LEFT) 
            i--; 
          else if (c2 == Token.RIGHT) 
            i++; 
        } 
        charpointer--; 
        break; 

      } 

}

部分程序應該在名爲file.txt的文件中讀入brainf * ck程序。問題是,我用hello world進行測試,我的程序沒有做任何事情。我無法找出上述代碼算法的問題。

+0

程序工作正常程序,而無需在[和] – user116944

+3

現在因爲「*」我們永遠不會知道你是什麼意思。 – Maroun

+0

請不要忘記接受答案,如果它解決了你的問題。否則,告訴我們什麼問題仍然存在,我們會盡力幫助你:) – benedek

回答

0

一個問題是,在[令牌之後,charpointer不會遞增。

這意味着如果當前datapointer下的值不爲零,則程序會卡在[符號上,因爲++charpointer即使執行一次也不會執行。 如果datapointer指向一個零,它跳轉到相應的],導致無限循環。

此外,]令牌後charpointer不應遞減,否則你的程序之前的],這是錯誤的跳上令牌

下面是更正後的代碼:

case Token.LEFT: 
    if (tape[datapointer] == 0) { 
    int i = 1; 
    while (i > 0) { 
     char c2 = (char) c[++charpointer]; 
     if (c2 == Token.LEFT) 
     i++; 
     else if (c2 == Token.RIGHT) 
     i--;  
    } 
    } 
    charpointer ++; 
    break; 
case Token.RIGHT: 
    int i = 1; 
    while (i > 0) { 
    char c2 = (char) c[--charpointer]; 
    if (c2 == Token.LEFT) 
     i--; 
    else if (c2 == Token.RIGHT) 
     i++; 
    } 
    break;