2017-09-24 21 views
0

我用我新從家裏的Java學習Java udacity.com和他們最喜歡給我我被卡住,不能得到它的工作問題的工作。有多個類

項目只是檢查球員的舉動是不是出在棋局綁定,然後看是否女王此舉是否有效。我們必須看到這3件事情應該工作。

  1. 在女王級,覆蓋isValidMove方法
  2. 首先調用父類的isValidMove檢查界限。
  3. 添加更多的代碼來檢查女王的具體舉措的有效性。

我有主類,遊戲類,位置類,塊類(父類)女王類(子類)。 我得到了1和3的工作,但不能瞭解如何獲得第二次工作它給我的錯誤,如果我嘗試打電話Piece.isValidMoveQueen.isValidMove之前。

我的代碼如下

Main.java

public class Main { 
    public static void main(String[] args) { 
     Piece piece = new Piece(); 
     Queen queen = new Queen(); 
     Position testPosition = new Position(3,7); 
     if(queen.isValidMove(testPosition)){ 
      System.out.println("Yes, I can move there."); 
     } 
     else { 
      System.out.println("Nope, can't do!"); 
     } 
    } 
} 

Game.java

public class Game { 
    Piece [][] board; 
    // Constructor creates an empty board 
    Game(){ 
     board = new Piece[8][8]; 
    } 
} 

Position.java

public class Position { 
    int row; 
    int column; 
    // Constructor using row and column values 
    Position(int r, int c){ 
     this.row = r; 
     this.column = c; 
    } 
} 

Piece.java

public class Piece { 
    Position position; 

    boolean isValidMove(Position newPosition){ 
     if(position.row>0 && position.column>0 
       && position.row<8 && position.column<8){ 
      return true; 
     } 
     else{ 
      return false; 
     } 
    } 
} 

Queen.java

public class Queen extends Piece { 
    int row; 
    int column; 
    boolean isValidMove(Position newPosition){ 
     if(newPosition.column == this.column || newPosition.row == this.row|| Math.abs(newPosition.column - this.column) == Math.abs(newPosition.row - this.row)){ 
      return true; 
     } 
     else{ 
      return false; 
     } 
    } 
} 

謝謝。

+2

什麼是你得到確切的錯誤? –

+0

我認爲它的'super.isValidMove()'。 –

+0

歡迎來到Stack Overflow!尋求調試幫助的問題(「爲什麼不是這個代碼工作?」)必須包含所需的行爲,特定的問題或錯誤,以及在問題本身中重現**的最短代碼(最好10行或更少)** 。沒有明確問題陳述的問題對其他讀者無益。請參閱:[如何創建最小,完整和可驗證示例](http://stackoverflow.com/help/mcve)。 –

回答

1

,但不能瞭解如何獲得第二次工作它給我的錯誤,如果我嘗試調用Piece.isValidMove主Queen.isValidMove

任務說,你需要調用父類的isValidMoveQueen.isValidMove,而不是Main。你需要的語法是super.isValidMove。因此,在Queen.java,做

boolean isValidMove(Position newPosition){ 
    // combine super.isValidMove(newPosition) and your current code 
} 

你並不需要改變Main

+0

異常在線程 「主」 顯示java.lang.NullPointerException \t在Piece.isValidMove(Piece.java:5) \t在Queen.isValidMove(Queen.java:5) \t在Main.main(Main.java:5 )這是我在使用超級女王課後獲得的 –

+0

'公共課女王延長件行int row; int列; boolean isValidMove(Position newPosition){if(!super.isValidMove(position)){ return false; } if(newPosition.column == this.column || newPosition.row == this.row || Math.abs(newPosition.column - this.column)== Math.abs(newPosition.row - this.row )){ return true; } else { return false; } } }' –

+0

對不起,我似乎無法獲得代碼外觀格式的代碼 –