2017-10-11 48 views
0

我正在編寫一個tic tac腳趾遊戲,我不確定是否有更快更簡單的方法來檢查贏家。如何簡化井字棋贏家檢查

if (boardArray[0][0] == boardArray[0][1] && boardArray[0][0] == boardArray[0][2]) { 
     System.out.println("The wimmer is: " + boardArray[0][0]); 
    } else if (boardArray[1][0] == boardArray[1][1] && boardArray[1][0] == boardArray[1][2]) { 
     System.out.println("The wimmer is: " + boardArray[1][0]); 
    } else if (boardArray[2][0] == boardArray[2][1] && boardArray[2][0] == boardArray[2][2]) { 
     System.out.println("The wimmer is: " + boardArray[2][0]); 
    } else if (boardArray[0][0] == boardArray[1][0] && boardArray[0][0] == boardArray[2][0]) { 
     System.out.println("The wimmer is: " + boardArray[0][0]); 
    }else if (boardArray[0][1] == boardArray[1][1] && boardArray[0][1] == boardArray[2][1]) { 
     System.out.println("The wimmer is: " + boardArray[0][1]); 
    } else if (boardArray[0][2] == boardArray[1][2] && boardArray[0][2] == boardArray[2][2]) { 
     System.out.println("The wimmer is: " + boardArray[0][2]); 
    } else if (boardArray[0][0] == boardArray[1][1] && boardArray[0][0] == boardArray[2][2]) { 
     System.out.println("The wimmer is: " + boardArray[0][0]); 
    } else if (boardArray[0][2] == boardArray[1][1] && boardArray[0][2] == boardArray[2][0]) { 
     System.out.println("The wimmer is: " + boardArray[1][1]); 
    } else { 
     System.out.println("ITS A DRAW"); 
    } 

我知道,我可以通過不同的指標使用for循環來循環但這只是減少了代碼由大約2/3的線,所以不會產生巨大的變化

+2

「減2/3」是很多,我們應該值得嗎?你應該使用循環的主要好處和原因是DRY:不要重複你自己。你實際上舉了一個很好的例子:你有一個錯字:「這個錯誤是:」。現在你必須改變8行而不是隻有一行。簡化代碼會使事情變得更容易,無論是糾正錯誤還是改變行爲。 – Sentry

+0

^應該是被接受的答案。 – onnoweb

+0

@Sentry你是對的,我改變了我的代碼 – KONADO

回答

0

你如果前面6個部分的語句不必經過。你可以使用循環。它會使你的代碼緊湊。

public static void check(int[][] boardArray) { 
    for (int i = 0; i < 3; i++) { 
     if (boardArray[i][0] == boardArray[i][1] && boardArray[i][0] == boardArray[i][2]) { 
      System.out.println("The winner is: " + boardArray[i][0]); 
      return; 
     } else if (boardArray[0][i] == boardArray[1][i] && boardArray[0][i] == boardArray[2][i]) { 
      System.out.printf("The winner is: " + boardArray[0][i]); 
      return; 
     } 
    } 

    if (boardArray[0][0] == boardArray[1][1] && boardArray[0][0] == boardArray[2][2]) { 
     System.out.println("The winner is: " + boardArray[0][0]); 
    } else if (boardArray[0][2] == boardArray[1][1] && boardArray[0][2] == boardArray[2][0]) { 
     System.out.println("The winner is: " + boardArray[1][1]); 
    } else { 
     System.out.println("ITS A DRAW"); 
    } 
} 
2

我知道,我可以通過不同的指標使用for循環來循環但這只是減少了代碼由大約2/3的線,所以不會產生巨大的變化。

您可以繼續使用循環來改進您的代碼,因爲它不僅減少了代碼行數量,還爲您提供了許多好處。它可以改善你的:

  • 可維護性

    要編輯的代碼,你只需要編輯一次,而不是編輯了N次,其中n是應該去通過迭代次數的。

  • 可擴展性

    這可能不是一個很好的例子,但是想象一下,你想向董事會改變爲4 x 4,隨着循環,你可能只需要更新的電路板尺寸。所有其他代碼幾乎可以保持不變。

  • 可讀性的代碼

    一個實例會更容易比多次重複行閱讀。

  • 減少錯別字的錯誤

    小碼,機會較小拼寫錯誤的機會。

  • 使由於提高可讀性調試更加方便

    錯誤的發現和調試實際上是更容易。