How to freely traverse the elements in a two-dimensional array by cardinal direction? (DOWN, UP, LEFT, RIGHT)

前端 未结 1 1394
借酒劲吻你
借酒劲吻你 2021-01-26 01:23

This question is about figuring the path through a maze, as is represented by a two-dimensional array. For example, the path through this maze

   0 1 2 3 4
   --         


        
相关标签:
1条回答
  • 2021-01-26 01:52

    I solved this with two classes, and an Enum.

    First, the enum, which defines the direction you want to move and determines the new indexes, one-at-a-time, based on its movement.

    enum Direction {
       UP(-1, 0),
       DOWN(1, 0),
       LEFT(0, -1),
       RIGHT(0, 1);
    
       private final int rowSteps;
       private final int colSteps;
       private Direction(int rowSteps, int colSteps)  {
          this.rowSteps = rowSteps;
          this.colSteps = colSteps;
       }
       public int getNewRowIdx(int currentRowIdx)  {
          return  (currentRowIdx + getRowSteps());
       }
       public int getNewColIdx(int currentColIdx)  {
          return  (currentColIdx + getColSteps());
       }
       public int getRowSteps()  {
          return  rowSteps;
       }
       public int getColSteps()  {
          return  colSteps;
       }
    };
    

    The main class is called GridPosition (below). First you set the double-array grid into it, via its int[][] constructor, and store that instance statically:

    private static final GridPosition GRID_HOLDER = new GridPosition(GRID);
    

    (This step could be designed better, but it works. Also, it should accept any type.)

    After setting the grid (which is a one-time-only thing, per-execution), then the x/y constructor is used to declare an initial position:

    GridPosition pos = new GridPosition(0, 0);
    

    And after that, just move as necessary:

    pos = pos.getNeighbor(Direction.RIGHT);
    pos = pos.getNeighbor(Direction.RIGHT);
    pos = pos.getNeighbor(Direction.DOWN);
    ...
    

    The value of each position is retrieved by pos.getValue(). (As an aside: The huge 2d-array used for the maze--at the bottom of this post, in the "full code"--should really contain one-bit booleans, instead of 4-byte ints, but looking at the array's code makes sense with ints, and doesn't with booleans... Note that it should at least be changed to bytes.)

    So regarding movement, if you attempt to get a neighbor when there is none, such as moving left at the left edge, an IllegalStateException is thrown. Use the is*Edge() functions to avoid this.

    The GridPosition class also has a convenient debugging function called getNineByNine(), which returns a 9x9 grid of the array values (as a string), where the middle item is the current position.

       import  java.util.Arrays;
       import  java.util.Objects;
    class GridPosition  {
    //state
       private static int[][] GRID;
       private final int rowIdx;
       private final int colIdx;
    //internal
       private final int rowIdxMinus1;
       private final int colIdxMinus1;
       public GridPosition(int[][] GRID)  {
          if(this.GRID != null)  {
             throw  new IllegalStateException("Grid already set. Use x/y constructor.");
          }
          GridPosition.GRID = GRID;
    
          //TODO: Crash if null or empty, or sub-arrays null or empty, or unequal lengths, or contain anything but 0 or -1.
    
          rowIdx = -1;
          colIdx = -1;
          rowIdxMinus1 = -1;
          colIdxMinus1 = -1;
       }
       public GridPosition(int rowIdx, int colIdx)  {
          if(GridPosition.GRID == null)  {
             throw  new IllegalStateException("Must set grid with: new GridPosition(int[][]).");
          }
    
          if(rowIdx < 0  ||  rowIdx >= GridPosition.getRowCount())  {
             throw  new IllegalArgumentException("rowIdx (" + rowIdx + ") is invalid.");
          }
          if(colIdx < 0  ||  colIdx >= GridPosition.getColumnCount())  {
             throw  new IllegalArgumentException("colIdx (" + colIdx + ") is invalid.");
          }
    
          this.rowIdx = rowIdx;
          this.colIdx = colIdx;
          rowIdxMinus1 = (rowIdx - 1);
          colIdxMinus1 = (colIdx - 1);
       }
       public int getValue()  {
          return  GridPosition.GRID[getRowIdx()][getColumnIdx()];
       }
       public int getRowIdx()  {
          return  rowIdx;
       }
       public int getColumnIdx()  {
          return  colIdx;
       }
       public GridPosition getNeighbor(Direction dir)  {
          Objects.requireNonNull(dir, "dir");
          return  (new GridPosition(
             dir.getNewRowIdx(getRowIdx()),
             dir.getNewColIdx(getColumnIdx())));
       }
       public GridPosition getNeighborNullIfEdge(Direction dir)  {
          if(isEdgeForDirection(dir))  {
             return  null;
          }
          return  getNeighbor(dir);
       }
       public int getNeighborValueNeg1IfEdge(Direction dir)  {
          GridPosition pos = getNeighborNullIfEdge(dir);
          return  ((pos == null) ? -1 : pos.getValue());
       }
       public static final int getRowCount()  {
          return  GRID.length;
       }
       public static final int getColumnCount()  {
          return  GRID[0].length;
       }
       public boolean isEdgeForDirection(Direction dir)  {
          Objects.requireNonNull(dir);
          switch(dir)  {
             case UP:    return isTopEdge();
             case DOWN:  return isBottomEdge();
             case LEFT:  return isLeftEdge();
             case RIGHT: return isRightEdge();
          }
          throw  new IllegalStateException(toString() + ", dir=" + dir);
       }
       public boolean isLeftEdge()  {
          return  (getColumnIdx() == 0);
       }
       public boolean isTopEdge()  {
          return  (getRowIdx() == 0);
       }
       public boolean isBottomEdge()  {
          return  (getRowIdx() == rowIdxMinus1);
       }
       public boolean isRightEdge()  {
          return  (getColumnIdx() == colIdxMinus1);
       }
       public String toString()  {
          return  "[" + getRowIdx() + "," + getColumnIdx() + "]=" + getValue();
       }
       public String getNineByNine()  {
          int[][] nineByNine = new int[3][3];
    
          //Middle row
             nineByNine[1][1] = getValue();
             nineByNine[1][0] = getNeighborValueNeg1IfEdge(Direction.LEFT);
             nineByNine[1][2] = getNeighborValueNeg1IfEdge(Direction.RIGHT);
    
          //Top
             GridPosition posUp = getNeighborNullIfEdge(Direction.UP);
             if(posUp != null)  {
                nineByNine[0][0] = posUp.getNeighborValueNeg1IfEdge(Direction.LEFT);
                nineByNine[0][1] = posUp.getValue();
                nineByNine[0][2] = posUp.getNeighborValueNeg1IfEdge(Direction.RIGHT);
             }
    
          //Bottom
             GridPosition posDown = getNeighborNullIfEdge(Direction.DOWN);
             if(posDown != null)  {
                nineByNine[2][0] = posDown.getNeighborValueNeg1IfEdge(Direction.LEFT);
                nineByNine[2][1] = posDown.getValue();
                nineByNine[2][2] = posDown.getNeighborValueNeg1IfEdge(Direction.RIGHT);
             }
    
          String sLS = System.getProperty("line.separator", "\r\n");
          return  "Middle position in 9x9 grid is *this*: " + toString() + sLS +
             Arrays.toString(nineByNine[0]) + sLS +
             Arrays.toString(nineByNine[1]) + sLS +
             Arrays.toString(nineByNine[2]);
       }
    }
    

    Here's a demo usage:

    public class GridPosDemo  {
       private static final int[][] GRID = new int[][] {
    
       //mega grid goes here...
    
       };
    
       private static final GridPosition GRID_HOLDER = new GridPosition(GRID);
    
       public static final void main(String[] ignored)  {
          GridPosition pos = new GridPosition(0, 0);
          System.out.println("start: " + pos);
    
          pos = pos.getNeighbor(Direction.RIGHT);
          System.out.println("right: " + pos);
    
          pos = pos.getNeighbor(Direction.RIGHT);
          System.out.println("right: " + pos);
    
          pos = pos.getNeighbor(Direction.DOWN);
          System.out.println("down:  " + pos);
    
          pos = pos.getNeighbor(Direction.DOWN);
          System.out.println("down:  " + pos);
    
          pos = pos.getNeighbor(Direction.RIGHT);
          System.out.println("right: " + pos);
    
          pos = pos.getNeighbor(Direction.DOWN);
          System.out.println("down:  " + pos);
    
          pos = pos.getNeighbor(Direction.LEFT);
          System.out.println("left:  " + pos);
    
          pos = pos.getNeighbor(Direction.UP);
          System.out.println("up:    " + pos);
    
          pos = pos.getNeighbor(Direction.UP);
          System.out.println("up:    " + pos);
    
          System.out.println(pos.getNineByNine());
       }
    
    }
    

    Output

    [C:\java_code\]java GridPosDemo
    start: [0,0]=1
    right: [0,1]=1
    right: [0,2]=1
    down:  [1,2]=1
    down:  [2,2]=1
    right: [2,3]=1
    down:  [3,3]=0
    left:  [3,2]=1
    up:    [2,2]=1
    up:    [1,2]=1
    Middle position in 9x9 grid is *this*: [1,2]=1
    [1, 1, 1]
    [0, 1, 0]
    [0, 1, 1]
    

    In order to use this for traversing the correct path through a maze, this needs "collision detection" added to it (so it doesn't go through walls), in addition to something to keep track of where you've been (so you don't end up back at the start-position). Such as with some getNeighborIfNotWall(Direction) and isWallToLeft() functions.

    Putting aside the maze-question, I would do the following before considering these classes complete:

    • Make the array-type generic, instead of ints
    • Add error checking, as documented in the code
    • Re-design how you set the grid.
    • Add diagonal directions: UP_LEFT, UP_RIGHT, DOWN_LEFT, DOWN_RIGHT
    • Add the ability to move multiple steps in one direction: getNeighbor(3, Direction.DOWN)

    Here's the entire source-code file, containing all of the above (including the mega-maze grid):

       //Needed only by GridPosition
       import  java.util.Arrays;
       import  java.util.Objects;
    
    enum Direction {
       UP(-1, 0),
       DOWN(1, 0),
       LEFT(0, -1),
       RIGHT(0, 1);
    //config
       private final int rowSteps;
       private final int colSteps;
       private Direction(int rowSteps, int colSteps)  {
          this.rowSteps = rowSteps;
          this.colSteps = colSteps;
       }
       public int getNewRowIdx(int currentRowIdx)  {
          return  (currentRowIdx + getRowSteps());
       }
       public int getNewColIdx(int currentColIdx)  {
          return  (currentColIdx + getColSteps());
       }
       public int getRowSteps()  {
          return  rowSteps;
       }
       public int getColSteps()  {
          return  colSteps;
       }
    };
    
    class GridPosition  {
    //config
       private static int[][] GRID;
       private final int rowIdx;
       private final int colIdx;
    //internal
       private final int rowIdxMinus1;
       private final int colIdxMinus1;
       public GridPosition(int[][] GRID)  {
          if(this.GRID != null)  {
             throw  new IllegalStateException("Grid already set. Use x/y constructor.");
          }
          GridPosition.GRID = GRID;
    
          //TODO: Crash if null or empty, or sub-arrays null or empty, or unequal lengths, or contain anything but 0 or -1.
    
          rowIdx = -1;
          colIdx = -1;
          rowIdxMinus1 = -1;
          colIdxMinus1 = -1;
       }
       public GridPosition(int rowIdx, int colIdx)  {
          if(GridPosition.GRID == null)  {
             throw  new IllegalStateException("Must set grid with: new GridPosition(int[][]).");
          }
    
          if(rowIdx < 0  ||  rowIdx >= GridPosition.getRowCount())  {
             throw  new IllegalArgumentException("rowIdx (" + rowIdx + ") is invalid.");
          }
          if(colIdx < 0  ||  colIdx >= GridPosition.getColumnCount())  {
             throw  new IllegalArgumentException("colIdx (" + colIdx + ") is invalid.");
          }
    
          this.rowIdx = rowIdx;
          this.colIdx = colIdx;
          rowIdxMinus1 = (rowIdx - 1);
          colIdxMinus1 = (colIdx - 1);
       }
       public int getValue()  {
          return  GridPosition.GRID[getRowIdx()][getColumnIdx()];
       }
       public int getRowIdx()  {
          return  rowIdx;
       }
       public int getColumnIdx()  {
          return  colIdx;
       }
       public GridPosition getNeighbor(Direction dir)  {
          Objects.requireNonNull(dir, "dir");
          return  (new GridPosition(
             dir.getNewRowIdx(getRowIdx()),
             dir.getNewColIdx(getColumnIdx())));
       }
       public GridPosition getNeighborNullIfEdge(Direction dir)  {
          if(isEdgeForDirection(dir))  {
             return  null;
          }
          return  getNeighbor(dir);
       }
       public int getNeighborValueNeg1IfEdge(Direction dir)  {
          GridPosition pos = getNeighborNullIfEdge(dir);
          return  ((pos == null) ? -1 : pos.getValue());
       }
       public static final int getRowCount()  {
          return  GRID.length;
       }
       public static final int getColumnCount()  {
          return  GRID[0].length;
       }
       public boolean isEdgeForDirection(Direction dir)  {
          Objects.requireNonNull(dir);
          switch(dir)  {
             case UP:    return isTopEdge();
             case DOWN:  return isBottomEdge();
             case LEFT:  return isLeftEdge();
             case RIGHT: return isRightEdge();
          }
          throw  new IllegalStateException(toString() + ", dir=" + dir);
       }
       public boolean isLeftEdge()  {
          return  (getColumnIdx() == 0);
       }
       public boolean isTopEdge()  {
          return  (getRowIdx() == 0);
       }
       public boolean isBottomEdge()  {
          return  (getRowIdx() == rowIdxMinus1);
       }
       public boolean isRightEdge()  {
          return  (getColumnIdx() == colIdxMinus1);
       }
       public String toString()  {
          return  "[" + getRowIdx() + "," + getColumnIdx() + "]=" + getValue();
       }
       public String getNineByNine()  {
          int[][] nineByNine = new int[3][3];
    
          //Middle row
             nineByNine[1][1] = getValue();
             nineByNine[1][0] = getNeighborValueNeg1IfEdge(Direction.LEFT);
             nineByNine[1][2] = getNeighborValueNeg1IfEdge(Direction.RIGHT);
    
          //Top
             GridPosition posUp = getNeighborNullIfEdge(Direction.UP);
             if(posUp != null)  {
                nineByNine[0][0] = posUp.getNeighborValueNeg1IfEdge(Direction.LEFT);
                nineByNine[0][1] = posUp.getValue();
                nineByNine[0][2] = posUp.getNeighborValueNeg1IfEdge(Direction.RIGHT);
             }
    
          //Bottom
             GridPosition posDown = getNeighborNullIfEdge(Direction.DOWN);
             if(posDown != null)  {
                nineByNine[2][0] = posDown.getNeighborValueNeg1IfEdge(Direction.LEFT);
                nineByNine[2][1] = posDown.getValue();
                nineByNine[2][2] = posDown.getNeighborValueNeg1IfEdge(Direction.RIGHT);
             }
    
          String sLS = System.getProperty("line.separator", "\r\n");
          return  "Middle position in 9x9 grid is *this*: " + toString() + sLS +
             Arrays.toString(nineByNine[0]) + sLS +
             Arrays.toString(nineByNine[1]) + sLS +
             Arrays.toString(nineByNine[2]);
       }
    }
    public class GridPosDemo  {
       private static final int[][] GRID = new int[][] {
          {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
          {0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1},
          {1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,0,1,0,1},
          {1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,0,0,1,0,1,0,1},
          {1,0,1,0,1,1,1,0,1,0,1,1,1,1,1,1,1,1,1,0,1,0,1,1,1,0,1,0,1,1,1,1,1,0,1,1,1,0,1,0,1,0,1,1,1,0,1,1,1,0,1},
          {1,0,1,0,1,0,1,0,1,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,1,0,1,0,1,0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,1},
          {1,0,1,1,1,0,1,0,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,0,1,0,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,1,1,1,1,0,1,0,1},
          {1,0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,1,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,1},
          {1,1,1,0,1,1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,1,1,0,1,1,1,1,1,1,1,0,1,0,1,0,1,1,1,0,1,1,1,1,1,1,1,0,1},
          {1,0,1,0,1,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,0,0,1},
          {1,0,1,0,1,0,1,1,1,1,1,0,1,0,1,0,1,1,1,0,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,0,1,1,1,0,1,0,1,1,1},
          {1,0,1,0,1,0,0,0,1,0,1,0,1,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1},
          {1,0,1,0,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,0,1,0,1,0,1,1,1,0,1,1,1,0,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1},
          {1,0,1,0,1,0,1,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1},
          {1,0,1,0,1,0,1,0,1,0,1,1,1,0,1,0,1,1,1,1,1,1,1,1,1,0,1,0,1,1,1,0,1,1,1,0,1,1,1,1,1,0,1,0,1,1,1,1,1,0,1},
          {1,0,0,0,1,0,1,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,1,0,0,0,0,0,1},
          {1,0,1,1,1,0,1,0,1,1,1,1,1,1,1,0,1,0,1,1,1,1,1,0,1,1,1,1,1,0,1,0,1,0,1,1,1,0,1,0,1,1,1,1,1,0,1,1,1,0,1},
          {1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,1,0,1,0,0,0,0,0,1,0,1,0,1},
          {1,1,1,1,1,0,1,1,1,0,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,0,1,0,1,1,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,0,1,0,1},
          {1,0,0,0,1,0,0,0,1,0,0,0,1,0,1,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,1},
          {1,0,1,1,1,1,1,0,1,1,1,0,1,1,1,0,1,0,1,1,1,0,1,0,1,1,1,0,1,1,1,1,1,0,1,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1},
          {1,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,1,0,1,0,1,0,1,0,1},
          {1,1,1,0,1,0,1,1,1,0,1,1,1,0,1,0,1,1,1,1,1,0,1,1,1,0,1,1,1,0,1,0,1,0,1,1,1,0,1,0,1,0,1,0,1,0,1,1,1,0,1},
          {1,0,0,0,1,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,1},
          {1,0,1,1,1,0,1,0,1,1,1,0,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,0,1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1},
          {1,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1},
          {1,0,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1,0,1,0,1,0,1,0,1,0,1,1,1,0,1,0,1,0,1,1,1,1,1,0,1,0,1,1,1,0,1,0,1,0,1},
          {1,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,0,0,1,0,1,0,1,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,1,0,1,0,0,0,1,0,1,0,1},
          {1,0,1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,0,1,0,1,0,1,1,1,0,1,0,1,0,1,1,1,1,1,0,1},
          {1,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,1,0,0,0,1,0,1,0,0,0,0,0,1,0,1},
          {1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,1,1,0,1,0,1},
          {1,0,0,0,1,0,1,0,0,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,1,0,1},
          {1,0,1,1,1,0,1,1,1,0,1,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,0,1,0,1,0,1},
          {1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1},
          {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1}};
       private static final GridPosition GRID_HOLDER = new GridPosition(GRID);
    
       public static final void main(String[] ignored)  {
          GridPosition pos = new GridPosition(0, 0);
          System.out.println("start: " + pos);
    
          pos = pos.getNeighbor(Direction.RIGHT);
          System.out.println("right: " + pos);
    
          pos = pos.getNeighbor(Direction.RIGHT);
          System.out.println("right: " + pos);
    
          pos = pos.getNeighbor(Direction.DOWN);
          System.out.println("down:  " + pos);
    
          pos = pos.getNeighbor(Direction.DOWN);
          System.out.println("down:  " + pos);
    
          pos = pos.getNeighbor(Direction.RIGHT);
          System.out.println("right: " + pos);
    
          pos = pos.getNeighbor(Direction.DOWN);
          System.out.println("down:  " + pos);
    
          pos = pos.getNeighbor(Direction.LEFT);
          System.out.println("left:  " + pos);
    
          pos = pos.getNeighbor(Direction.UP);
          System.out.println("up:    " + pos);
    
          pos = pos.getNeighbor(Direction.UP);
          System.out.println("up:    " + pos);
    
          System.out.println(pos.getNineByNine());
       }
    
    }
    
    0 讨论(0)
提交回复
热议问题