2016-01-06 29 views
0

我正試圖解決導航網格系統內的芭比娃娃有趣的問題。最初,芭比在[0,0]的位置,意味着在X和Y軸的交點。芭比有三項運動,其中'F'爲前鋒,'R'爲右轉(90度),'L'爲左轉(90度)。說,如果我通過方向字符串「FF」,位置應該是[0,2]。我解決問題,代碼的當前狀態爲如下,如何瀏覽網格系統中的芭比娃娃?

public static void barbiePosition(String str){ 

    if(str == null || str.length() == 0) 
     return; 

    int [] initial = {0,0}; 

    boolean xPos = false, xNeg = false, yPos = true, yNeg = false; 

    char[] ch = str.toCharArray(); 

    for(char c: ch){ 

     // the initial postion of the robot is towards the positive Y axis 

     if(c == 'L'){ 

      if(xPos){ 

       xPos = false; 
       yPos = true; 
      } 

      else if (xNeg){ 


       xNeg = false; 
       yNeg = true; 
      } 

      else if(yPos){ 

       xNeg = true; 
       yPos = false; 

      } 

      else if (yNeg){ 

       yNeg = false; 
       xPos = true; 
      } 
     } 

     else if (c == 'R'){ 

      if(xPos){ 

       xPos = false; 
       yNeg = true; 
      } 

      else if (xNeg){ 

       yPos = true; 
       xNeg = false; 
      } 

      else if(yPos){ 

       yPos = false; 
       xPos = true; 
      } 

      else if (yNeg){ 

       yNeg = false; 
       xNeg = true; 
      } 

     } 

     else if (c == 'F'){ 

      if(xNeg){ 

       initial[0] -= 1; 
      } 

      else if (xPos){ 

       initial[0] += 1; 
      } 

      else if (yNeg){ 

       initial[1] -=1; 
      } 

      else if(yPos){ 

       initial[1] += 1; 
      } 

     } 
    } 

    System.out.println(Arrays.toString(initial)); 
} 

的事情是我不爲它的解決方案感到難看。有沒有更好的方法來設計算法 ?

+0

首先,如果這是一個網格,最好的解決方案是有一個二維數組來表示列(您的向前方向),另一個表示行(您向右/向左) –

+0

Java數組的維度是固定的初始化,所以,我認爲它可能不是正確的數據結構來處理這個問題,並會在大量的方向上失敗。 – Arefe

回答

1

什麼是您的應用程序中的「前進」是上一步行動的功能。轉發僅僅意味着你重複你的最後一步。

如果轉發是你的第一步,你需要選擇一個類似「芭比最初移動到右邊」的約定。

+0

我解決了它,但是,我很感謝重新設計算法的一些幫助。 – Arefe