2016-09-18 18 views
0

booleanメソッドのifステートメントでstep()メソッドの方向を呼び出そうとしていますが、可変方向。誰も私がこれを正しく行う方法を理解するのを助けることができますか?ifステートメント内の同じクラス内の別のメソッドからメソッドを呼び出す方法

public class SelfAvoidingRandomWalk 
{ 
    private char[][] board ; 
    private char symbol ; 
    private int lengthOfWalk, currRow, currColumn ; 

    public SelfAvoidingRandomWalk(int numRows, int numColumns, 
           int startRow, int startColumn) 
    { 
     board = new char[numRows][numColumns] ; 
     lengthOfWalk = 0 ; 
     symbol = '$' ; 
     board[startRow][startColumn] = symbol ; 
     currRow = startRow ; 
     currColumn = startColumn ; 
    } 

    private final static int NORTH = 8 ; 
    private final static int SOUTH = 2 ; 
    private final static int WEST = 4 ; 
    private final static int EAST = 6 ; 

    public void step(int direction) 
    { 
     if (direction == NORTH) 
     { 
      if (currRow == 0) 
      { 
       currRow = board.length ; 
      } 
      currRow-- ; 
      symbol = 'N' ; 
     } 
     else if (direction == SOUTH) 
     { 
      currRow = (currRow + 1) % board.length ; 
      symbol = 'S' ; 
     } 
     else if (direction == EAST) 
     { 
      currColumn = (currColumn + 1) % board[0].length ; 
      symbol = 'E' ; 
     } 
     else if (direction == WEST) 
     { 
      if (currColumn == 0) 
      { 
       currColumn = board[0].length ; 
      } 
      currColumn-- ; 
      symbol = 'W' ; 
     } 
     board[currRow][currColumn] = symbol ; 
    } 

    public boolean canTakeStep() 
    { 
     boolean stepOk = true ; 

     if (board[currRow + 1][currColumn] == symbol) 
     { 
      if (step(2) == SOUTH) 
      { 
       stepOk = false ; 
      } 
     } 

     if (board[currRow - 1][currColumn] == symbol) 
     { 
      if (step(8) == NORTH) 
      { 
       stepOk = false ; 
      } 
     } 

     if (board[currRow][currColumn + 1] == symbol) 
     { 
      if (step(6) == EAST) 
      { 
       stepOk = false ; 
      } 
     } 

     if (board[currRow][currColumn - 1] == symbol) 
     { 
      if (step(4) == WEST) 
      { 
       stepOk = false ; 
      } 
     } 

     return stepOk ; 
    } 

    public int length() 
    {   
     if (canTakeStep() == true) 
     { 
      lengthOfWalk++ ; 
     } 
     else 
     { 
      System.out.println("The length of your walk was: " + lengthOfWalk) ; 
     } 

     return lengthOfWalk ; 
    } 

    public void print() 
    { 
     printTopBottom() ; 

     for (int r = 0; r < board.length; r++) 
     { 
      System.out.print("|") ; 

      for (int c = 0; c < board[r].length; c++) 
      { 
       if (symbol == '$' || symbol == 'N' || symbol == 'S' || symbol == 'W' || symbol == 'E') 
       { 
        if (board[r][c] != symbol) 
        { 
         System.out.print(" ") ; 
        } 

        else 
        { 
         System.out.print(symbol) ; 
        } 
       } 
      } 

      System.out.println("|") ; 
     } 

     printTopBottom() ; 
    } 

    private void printTopBottom() 
    { 
     System.out.print("+") ; 

     for (int c = 0; c < board[0].length; c++) 
     { 
      System.out.print("-") ; 
     } 

     System.out.println("+") ; 
    } 
} 

そしてここで、ドライバクラスがメインメソッドである:

import java.util.Scanner ; 

public class Lab2 
{ 
    public static void main(String args[]) 
    { 
     Scanner input = new Scanner(System.in) ; 

     System.out.print("Enter number of rows: ") ; 
     int numRows = input.nextInt() ; 
     System.out.print("Enter number of columns: ") ; 
     int numColumns = input.nextInt() ; 
     System.out.print("Enter start row: ") ; 
     int startRow = input.nextInt() ; 
     System.out.print("Enter start column: ") ; 
     int startColumn = input.nextInt() ; 

     System.out.println() ; 

     SelfAvoidingRandomWalk selfAvoidingRandomWalk = new SelfAvoidingRandomWalk(numRows, numColumns, 
      startRow, startColumn) ; 

     selfAvoidingRandomWalk.print() ; 

     while (selfAvoidingRandomWalk.canTakeStep() == true) 
     { 
      System.out.print("Enter the direction you'd like to go: ") ; 
      int theMove = input.nextInt() ; 

      selfAvoidingRandomWalk.step(theMove) ; 
      selfAvoidingRandomWalk.print() ; 
     } 

     selfAvoidingRandomWalk.length() ; 
    } 
} 
+0

あなたが何をしようとしているのかは明確ではありません。 'canTakeStep()'メソッドで変数 'direction'を宣言する必要があるのは、グローバル変数として既に宣言されていない限りです。実際には、変数を 'step'メソッドの引数として渡すので、宣言されているだけでなく、定義されていなければなりません。 – Hiren

+0

また、 'canTakeStep'メソッドでは' step'メソッド呼び出しが何かを返すことを期待していますが、後者は何も返さないことに注意してください。また、 'step'メソッドは、引数が定義に従って整数であることを期待していますが、文字列であるかのように扱います。 – Hiren

+0

@Hirenこれは、stepメソッドですでに宣言されているため、どこからでも可変の方向を定義することはできません。この場合、stepメソッドはvoidになります。また、私はステップメソッドの定数を設定しているので、引数をテキスト文字列として扱うようですが、実際は整数として扱われます。 – confusedcsstudent

答えて

0

あなたのステップの方法は、int型の方向パラメータを受け取り、あなたのcanTakeStep方法がありません。ステップメソッドで行っているのと同じ方法で変数を渡してください:

public boolean canTakeStep(int direction) 
{ 

} 
+0

それは私に可変方向を定義する必要があり、それは別の方法の一部であるユーザーの入力に依存します。 – confusedcsstudent

+0

yeapですが、そうでなければそのメソッドに変数を使用することはできません –

関連する問題