2017-09-24 5 views
0

私はudacity.comを使用して自宅でJavaを学習することに新しいので、私は立ち往生していません。複数のクラスを扱っています

プロジェクトは、プレイヤーの移動がチェスゲームで逸脱していないかどうかを確認してから、クイーンズの移動が有効かどうかを確認するだけです。私たちはこれら3つのものがうまくいくのを見なければなりません。女王のクラスで

  1. isValidMoveメソッドをオーバーライド
  2. まず境界をチェックするために、親のisValidMoveを呼び出します。
  3. クイーンの具体的な移動の有効性を確認するコードを追加します。

私は、メインクラス、ゲームクラス、ポジションクラス、Pieceクラス(Parentクラス)、Queenクラス(Child)を持っています。 私は1と3を稼働していますが、Queen.isValidMoveの前にPiece.isValidMoveをメインに呼び出すと、2番目の作業を行う方法を理解できないため、エラーが表示されます。

私のコード

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

ようこそスタックオーバーフロー!デバッグの助けを求める質問(なぜ "このコードは動作しないのですか?")には、質問自体に必要な動作、_a特定の問題またはerror_および_を最短のコードで必要なもの(好ましくは10行以下) 。明確な問題文がない質問は、他の読者にとって有用ではありません。参照:[最小限で完全で検証可能なサンプルの作成方法](http://stackoverflow.com/help/mcve)スレッド "メイン" java.lang.NullPointerExceptionがPiece.isValidMoveで \t(Piece.java:5)Queen.isValidMoveで \t(Queen.java:5)で –

答えて

1

が、私はQueen.isValidMove

タスクは、親のisValidMove中を呼び出す必要が言う前にメインでPiece.isValidMoveを呼び出ししようとした場合、それは私にエラーを与える第二の作業を取得する方法を理解することはできませんQueen.isValidMoveMainにはありません。必要な構文はsuper.isValidMoveです。だから、Queen.javaで、

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

を行うあなたはMainを変更する必要はありません。

+0

例外Main.mainで \t(Main.java:5 )これは、クイーンクラスのスーパーを使った後のものです。 –

+0

'public class Queen extends Piece { int row; int列。 ブール値isValidMove(位置newPosition){ if(!super.isValidMove(position)){ 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 { falseを返します。 } } } ' –

+0

混乱のために申し訳ありませんコードの形式でコードを取得するようです –

関連する問題