2012-12-07 111 views
0

我的任務:與測試問題導致

斯泰克斯的遊戲 - 類似一個遊戲玩上「倖存者,泰國」前一段時間 - 在一個簡化版本某種程度上是這樣的:

這是發揮由兩名球員(在倖存者是兩個以上,但在這裏我們只處理兩個)。一些棒(如火柴)放在桌子上。第一位選手需要拿走1杆,2杆或3杆,但前提是桌子上有許多杆。然後第二位玩家拿走1,2或3根棍棒(如果可能的話)等等。誰拿走了最後一根棍子,誰輸了。

這是我的課:

public class StixBoard 
{ 
    public int number; 

    public StixBoard(int number) 
    { 
    this.number = number; 
    } 

    public int getNumStix() 
    { 
    return number; 
    } 

    public boolean takeStix(int number) 
    { 
    int take = 0; 

    while(take != number && number <= 3 && number > 0) 
    { 
     number = this.number - take; 
     take++; 
    } 

    if(this.number >= 1 && this.number <= 3) 
    { 
     number = number - this.number; 
     System.out.println("Number of sticks on board:" + number); 
     return(true); 
    } 
    else 
     System.out.println("Illegeal Move"); 
    return(false); 
    } 

    public boolean isGameOver() 
    { 
    if(number >=1) 
    { 
     return(true); 
    } 
    else 
     return false; 
    } 

    public String toString() 
    { 
    return(getNumStix() + " Stix Remaining."); 
    } 
} 

這是我的測試:

public class StixGame 
{ 

    public static void main(String[] args) 
    { 

    StixBoard game1 = new StixBoard(6); 
    System.out.println(game1.getNumStix()); 
    System.out.println(game1.takeStix(1)); 
    System.out.println(game1.getNumStix()); 
    } 

} 

我似乎無法迴避這個輸出遠:

6 
Illegeal Move 
false 
6 
+1

我看到你的代碼 – PermGenError

+0

變量遮蔽你嘗試過使用調試器? –

回答

1

您使用變量number太多次,這會讓你的代碼非常混亂......使用IDE重命名變量e在你的課上totalStix,問題變得瞬間明顯。

  • 您的takeStix方法不應該需要while循環。所發生的只是一名球員正在接受治療,對吧?因此刪除該代碼。
  • 然後,變得清楚(現在變量命名不那麼令人困惑),您將剩餘棒的數量視爲要取走的數量,因此請切換所有這些變量。
  • 此外,將方法的參數重命名爲take,因爲這就是您要帶走的內容。

留給你用下面的代碼(有一些其他小的調整):

public class StixBoard 
{ 
    public int totalStix; 

    public StixBoard(int number) 
    { 
    this.totalStix = number; 
    } 

    public int getNumStix() 
    { 
    return totalStix; 
    } 

    public boolean takeStix(int take) 
    { 
    if(take >= 1 && take <= 3) 
    { 
     totalStix -= take; 
     System.out.println("Number of sticks on board:" + totalStix); 
     return true; 
    } 

    System.out.println("Illegeal Move"); 
    return false ; 
    } 

    public boolean isGameOver() 
    { 
    if(totalStix >=1) 
    { 
     return(true); 
    } 
    else 
     return false; 
    } 

    public String toString() 
    { 
    return(getNumStix() + " Stix Remaining."); 
    } 
}