2011-11-29 52 views
0

爲了解釋我在做什麼,我基本上將X和O的字符串作爲輸入字符串,將其轉換爲數組,因此XXXOXOXOO作爲輸入將是相同的數組。然後,我正在檢查每個可能的情況,哪一個可以獲勝,協調明智,如果它匹配通過if語句,則返回與誰獲勝相對應的數字。編寫一個Tic Tac Toe程序,但輸出不是它應該的,任何人都可以幫忙?

但它不是很工作,哈哈。它似乎只輸出O作爲勝利者,在明顯的情況下X應該贏。

任何人都可以伸出援手嗎?預先感謝,謝謝。

import java.util.Scanner; 
public class TicTacToe { 
    public static void main(String[] args) { 

     Scanner keyboard = new Scanner(System.in); 

     System.out.println("Type in a board for analysis"); 
     String b = keyboard.nextLine(); 

     drawBoard(b); 

     int result = decide(b); 

     if (result == 1) { 
      System.out.println("Win for X"); 
     } 
     else if (result == 0) { 
      System.out.println("Win for O"); 
     } 
     else if (result == 3) { 
      System.out.println("Draw"); 
     } 
     else { 
      System.out.println("Game Unfinished"); 
     } 
    } 

    public static int decide(String scheme) { 
     int decision = 0; 

     String boardScheme[] = new String[9]; 

     for (int i = 0; i < 9; i++) { 
      boardScheme[i] = scheme.substring(i,i+1); 
     } 

     if ((boardScheme[0] == boardScheme[1] && boardScheme[0] == boardScheme[2]) || (boardScheme[0] == boardScheme[3] && boardScheme[0] == boardScheme[6]) || (boardScheme[0] == boardScheme[4] && boardScheme[0] == boardScheme[8])) { 
      if (boardScheme[0] == "X") { 
       decision = 1; 
      } 
      else { 
       decision = 0; 
      } 
     } 
     else if (boardScheme[3] == boardScheme[4] && boardScheme[3] == boardScheme[5]) { 
      if (boardScheme[3] == "X") { 
       decision = 1; 
      } 
      else { 
       decision = 0; 
      } 
     } 
     else if (boardScheme[6] == boardScheme[7] && boardScheme[6] == boardScheme[8]) { 
      if (boardScheme[6] == "X") { 
       decision = 1; 
      } 
      else { 
       decision = 0; 
      } 
     } 
     else if (boardScheme[1] == boardScheme[4] && boardScheme[1] == boardScheme[7]) { 
      if (boardScheme[1] == "X") { 
       decision = 1; 
      } 
      else { 
       decision = 0; 
      } 
     } 
     else if ((boardScheme[2] == boardScheme[5] && boardScheme[2] == boardScheme[8]) || (boardScheme[2] == boardScheme[4] && boardScheme[2] == boardScheme[6])) { 
      if (boardScheme[2] == "X") { 
       decision = 1; 
      } 
      else { 
       decision = 0; 
      } 
     } 

     return decision; 
    } 

    public static void drawBoard(String scheme) { 
     if (scheme.length() == 9) { 
      String board[] = new String[9]; 

      for (int i = 0; i < 9; i++) { 
       board[i] = scheme.substring(i,i+1); 
      } 

      System.out.println(board[0] + " | " + board[1] + " | " + board[2]); 
      System.out.println(board[3] + " | " + board[4] + " | " + board[5]); 
      System.out.println(board[6] + " | " + board[7] + " | " + board[8]); 
     } 
     else { 
      System.out.println("Please input 9 characters, no more, no less."); 
     } 
    } 
} 
+0

你不能使用二維數組嗎? –

+1

我看到一個問題:從不使用'=='比較兩個字符串,因爲這將檢查一個對象是否與另一個對象相同 - 您不關心的東西。而是使用String方法'equals(...)'或'equalsIgnoreCase(...)',因爲它們將檢查兩個字符串是否具有相同順序的相同字符。 –

回答

2

您沒有涵蓋所有可能的情況。如果你錯過了一個案子會發生什麼?對不起,我經歷了他們,確實你確實覆蓋了每個案件。但是,正如Hovercraft Full Of Eels在該問題的評論中指出的那樣,您正在比較不正確的字符串。我仍然會建議如下。

您正在設置decision = 0,所以無論何時發生您未覆蓋的情況,您最終都會返回0.哪個會輸出'O'勝。

所以,你需要做的是找出每個可能發生的情況,然後檢查它。我還建議你使用codereview.stackexchange.com並詢問如何重構代碼的一些建議,最後它會讓你更容易。

例如,如果您有功能horizontalWin(int column)verticalWin(int row)diagonalWin()

祝你好運!

+0

優秀的建議! 1+ –