SlideShare a Scribd company logo
Java Question : help needed In the program "Fill the Add statements Area" here area. Sample
Output in the picture
Consider a maze made up of a rectangular array of squares. The maze will contain a
character (either +, -, or |) to represent a blocked square, and to form the walls of the
maze. Mazes will have only one entrance at the Coordinate (0, 1), with only one exit in
the lower right hand corner of the maze.
Beginning at the entrance to the maze, find a path to the exit at the bottom right of the
maze. You may only move up, down, left, and right. Each square in the maze can be in
one of four states: clear (space), blocked (X), path (.), or visited (*). Initially, after the
maze has been read in from the file, each square will be either clear or blocked. If a
square lies on a successful path, mark it with a period. If you visit a square but it does
not lead to a successful path, mark it as visited with an asterisk.
This is the program for it
public class Coordinate {
public int x;
public int y;
public Coordinate( int x, int y ) {
this.x = x;
this.y = y;
}
public String toString() {
return "(" + this.x + "," + this.y + ")";
}
@Override
public boolean equals( Object object ) {
if( object == null ) {
return false;
}
if( ! Coordinate.class.isAssignableFrom( object.getClass() )) {
return false;
}
final Coordinate other = (Coordinate) object;
return this.x == other.x && this.y == other.y;
}
}
import java.util.Vector;
public class Maze {
private char[][] maze;
private int height;
private int width;
/**
* Create a new Maze of the specified height and width, initializing every
* location as empty, with a ' '.
**/
public Maze( int width, int height ) {
this.width = width;
this.height = height;
this.maze = new char [this.width][this.height];
// ADD STATEMENTS HERE
}
/**
* Mutator to allow us to set the specified Coordinate as blocked,
* marking it with a 'X'
**/
public void setBlocked( Coordinate coord ) {
// ADD STATEMENTS HERE
}
/**
* Mutator to allow us to set the specified Coordinate as having been visited,
* marking it with a '*'
**/
public void setVisited( Coordinate coord ) {
// ADD STATEMENTS HERE
}
/**
* Mutator to allow us to set the specified Coordinate as part of the path solution,
* marking it with a '.'
**/
public void setPath( Coordinate coord ) {
// ADD STATEMENTS HERE
}
/**
* Returns the character at the locatio specified by the Coordinate
**/
public char at( Coordinate coord ) {
// ADD STATEMENTS HERE
}
/**
* Returns a Coordinate array containing all Coordinates that are clear around
* the specified coordinate.
**/
public Coordinate[] clearAround( Coordinate coord ) {
Vector vector = new Vector();
// ADD STATEMENTS HERE
// Look at each of the locations around the specified Coordinate, and add it
// to the vector if it is clear (i.e. a space)
return vector.toArray( new Coordinate[0] );
}
/**
* Returns a Coordinate that provides the entrance location in this maze.
**/
public Coordinate start() {
return new Coordinate( 0, 1 );
}
/**
* Returns a Coordinate that provides the exit location from this maze.
**/
public Coordinate end() {
// ADD STATEMENTS HERE
}
/**
* The toString() method is responsible for creating a String representation
* of the Maze. See the project specification for sample output. Note that
* the String representation adds numbers across the top and side of the Maze
* to show the Coordinates of each cell in the maze.
**/
public String toString() {
StringBuilder buffer = new StringBuilder();
// ADD STATEMENTS HERE
// First, print out the column headings
// Next, print out each row in the maze - note the spaces between
// cells to facilitate reading. Each row should include its row number.
for(int x=0; x
for(int y=0; y
buffer.append(maze[x][y]);
buffer.append(" ");
return buffer.toString();
}
}
package p2;
import java.io.FileNotFoundException;
public class MazeSolver {
private Maze maze;
private LinkedStack path;
public MazeSolver( Maze maze ) {
// ADD STATEMENTS HERE
}
public void solve() {
// ADD STATEMENTS HERE
// Add the starting Coordinate to the maze, and while the Stack has
// entries, and the top of the Stack is not the end, continue searching
// for the path
}
public static void main( String[] args ) throws FileNotFoundException {
MazeReader reader = new MazeReader( "sampleMaze.txt" );
Maze maze = reader.open();
MazeSolver solver = new MazeSolver( maze );
System.out.println( "Before solving" );
System.out.println( maze );
System.out.println( "Start is " + maze.start() );
System.out.println( "End is " + maze.end() );
solver.solve();
System.out.println( "After solving (. shows solution, o shows visited)" );
System.out.println( maze );
}
}package p2;import java.util.Scanner;import java.io.File;import
java.io.FileNotFoundException;public class MazeReader {private String fileName;private Maze
maze;public MazeReader( String fileName ) {this.fileName = fileName;this.maze = null;}public
Maze open() throws FileNotFoundException {Scanner scanner = new Scanner( new File(
this.fileName ));int width = scanner.nextInt();int height = scanner.nextInt();this.maze = new
Maze( width, height );// Remove new line after intscanner.nextLine();// ADD STATEMENTS
HERE// You will need to read in each line using the Scanner, and provide// the row number and
the line to the addLine method to add it to the Mazereturn this.maze;}private void addLine( int
row, String line ) {// ADD STATEMENTS HERE}public static void main( String[] args )
throws FileNotFoundException {MazeReader reader = new MazeReader( "sampleMaze.txt"
);Maze maze = reader.open();System.out.println( maze );System.out.println( maze.at( new
Coordinate( 0, 0 )));System.out.println( maze.at( new Coordinate( 0, 1 )));}}
Solution
import java.io.*;
class Maze
{
class MazeSquare
{
public boolean hasTopWall;
public boolean hasRightWall;
public boolean hasLeftWall;
public boolean hasBottomWall;
public MazeSquare()
{
hasTopWall = hasRightWall = hasLeftWall = hasBottomWall = false;
}
}
class MazeFormatException extends Exception
{
public final static int noError = 0;
public final static int badRowAndColumnCounts = 1;
public final static int wrongNumberOfEntriesInRow = 2;
public final static int badEntry = 3;
public int lineNumber;
public int problem;
public MazeFormatException( int line, int prob )
{
lineNumber = line;
problem = prob;
}
}
private int nRows;
private int nColumns;
MazeSquare[][] square;
public static void main( String[] args )
{
if( args.length != 1 )
{
System.err.println( "Usage: java Maze mazeFileName" );
System.exit( 1 );
}
Maze knosos = null;
try
{
knosos = new Maze( args[0] );
}
catch( FileNotFoundException e )
{
System.err.println( "Can't open " + args[0] + ". Check your spelling." );
System.exit( 1 );
}
catch( IOException e )
{
System.err.println( "Severe input error. I give up." );
System.exit( 1 );
}
catch( MazeFormatException e )
{
switch( e.problem )
{
case MazeFormatException.badRowAndColumnCounts:
System.err.println( args[0] + ", line " + e.lineNumber + ": row and column counts
expected" );
break;
case MazeFormatException.wrongNumberOfEntriesInRow:
System.err.println( args[0] + ", line " + e.lineNumber + ": wrong number of entries"
);
break;
case MazeFormatException.badEntry:
System.err.println( args[0] + ", line " + e.lineNumber + ": non-hexadecimal digit
detected" );
break;
default:
System.err.println( "This should never get printed." );
break;
}
System.exit( 1 );
}
knosos.print( System.out );
}
public Maze()
{
square = null;
nRows = nColumns = 0;
}
public Maze( String fileName ) throws FileNotFoundException, IOException,
MazeFormatException
{
BufferedReader in = null;
in = new BufferedReader( new FileReader( fileName ) );
load( in );
in.close();
}
public void load( BufferedReader in ) throws MazeFormatException
{
String line;
String[] tokens;
int lineNumber = 0;
try
{
line = in.readLine();
lineNumber++;
tokens = line.split( "s+" );
nRows = Integer.parseInt( tokens[0] );
nColumns = Integer.parseInt( tokens[1] );
if( nRows <= 0 || nColumns <= 0 )
throw new Exception();
}
catch( Exception e )
{
throw new MazeFormatException( lineNumber,
MazeFormatException.badRowAndColumnCounts );
}
// Allocate the 2D array of MazeSquares.
square = new MazeSquare[nRows][nColumns];
for( int i=0; i < nRows; i++ )
for( int j=0; j < nColumns; j++ )
square[i][j] = new MazeSquare();
for( int i=0; i < nRows; i++ )
{
try
{
line = in.readLine();
lineNumber++;
tokens = line.split( "s+" );
if( tokens.length != nColumns )
throw new Exception();
}
catch( Exception e )
{
throw new MazeFormatException( lineNumber,
MazeFormatException.wrongNumberOfEntriesInRow );
}
for( int j=0; j < nColumns; j++ )
{
int squareValue;
try
{
squareValue = Integer.parseInt( tokens[j], 16 );
}
catch( NumberFormatException e )
{
throw new MazeFormatException( lineNumber, MazeFormatException.badEntry );
}
// These are "bitwise AND" operations. We'll discuss them in class.
square[i][j].hasTopWall = ((squareValue & 1) != 0);
square[i][j].hasRightWall = ((squareValue & 2) != 0);
square[i][j].hasBottomWall = ((squareValue & 4) != 0);
square[i][j].hasLeftWall = ((squareValue & 8) != 0);
}
}
}
public void print( PrintStream out )
{
int i, j;
for( i=0; i < nRows; i++ )
{
out.print( '+' );
for( j=0; j < nColumns; j++ )
{
if( i > 0 && square[i][j].hasTopWall != square[i-1][j].hasBottomWall )
out.print( "xxx+" );
else if( square[i][j].hasTopWall )
out.print( "---+" );
else
out.print( " +" );
}
out.println();
if( nColumns > 0 && square[i][0].hasLeftWall )
out.print( '|' );
else
out.print( ' ' );
for( j=0; j < nColumns; j++ )
{
if( j < nColumns - 1 && square[i][j].hasRightWall != square[i][j+1].hasLeftWall )
out.print( " X" );
else if( square[i][j].hasRightWall )
out.print( " |" );
else
out.print( " " );
}
out.println();
}
if( nRows > 0 )
{
out.print( '+' );
for( j=0; j < nColumns; j++ )
{
if( square[nRows-1][j].hasBottomWall )
out.print( "---+" );
else
out.print( " +" );
}
out.println();
}
}
}

More Related Content

PDF
java question Fill the add statement areaProject is to wo.pdf
PDF
Java Question Consider a maze made up of a rectangular array of squ.pdf
PDF
hello the code given is mostly complete but I need help with the Sol.pdf
PDF
Topic Use stacks to solve Maze. DO NOT USE RECURSION. And do not us.pdf
PDF
Requirements Use JavaDo Not Use RecursionDo Not Use Array Lis.pdf
DOCX
Please copy and paste the code and explain why it won't work- It is su.docx
PDF
Write a program that randomly generates a maze in javaSolution.pdf
PDF
package lab7; import java.util.Scanner; Sammy Student, Program.pdf
java question Fill the add statement areaProject is to wo.pdf
Java Question Consider a maze made up of a rectangular array of squ.pdf
hello the code given is mostly complete but I need help with the Sol.pdf
Topic Use stacks to solve Maze. DO NOT USE RECURSION. And do not us.pdf
Requirements Use JavaDo Not Use RecursionDo Not Use Array Lis.pdf
Please copy and paste the code and explain why it won't work- It is su.docx
Write a program that randomly generates a maze in javaSolution.pdf
package lab7; import java.util.Scanner; Sammy Student, Program.pdf

Similar to Java Question help needed In the program Fill the Add statements.pdf (20)

PPTX
shubham_yadav.ug21@nsut.ac.in_coding_pptx
PDF
I need help with this maze gui that I wrote in java, I am trying to .pdf
PDF
Find the shortest route through a maze using linking and linked list.pdf
PDF
SaveI need help with this maze gui that I wrote in java, I am tryi.pdf
PDF
need help with code I wrote. This code is a maze gui, and i need hel.pdf
PDF
Maze solving app listing
PDF
import javautilLinkedList import javautilQueue import .pdf
DOCX
Maze Solver - Rubric.xlsxSheet1Maze Solver - RubricStudent Nam.docx
PDF
To start your program ask the user for a number of rows and.pdf
PDF
import java.util.; import orbital.math.; import orbital.algori.pdf
PPT
An elementary navigation simulated in Java
PPTX
PPTX
Rat_in_Maze(Dynamic programming-tabulation)
PDF
Programming at King's
DOCX
python_assignmentHanoi (1).py################################.docx
PPTX
Rat_in_a_maze((Dynamic programming-tabulation))
PDF
Getting some errors when trying to run this program, can anyone help.pdf
TXT
Maze
DOCX
FilesAssignm3.h#ifndef Assignm3_H#define Assignm3_H.docx
shubham_yadav.ug21@nsut.ac.in_coding_pptx
I need help with this maze gui that I wrote in java, I am trying to .pdf
Find the shortest route through a maze using linking and linked list.pdf
SaveI need help with this maze gui that I wrote in java, I am tryi.pdf
need help with code I wrote. This code is a maze gui, and i need hel.pdf
Maze solving app listing
import javautilLinkedList import javautilQueue import .pdf
Maze Solver - Rubric.xlsxSheet1Maze Solver - RubricStudent Nam.docx
To start your program ask the user for a number of rows and.pdf
import java.util.; import orbital.math.; import orbital.algori.pdf
An elementary navigation simulated in Java
Rat_in_Maze(Dynamic programming-tabulation)
Programming at King's
python_assignmentHanoi (1).py################################.docx
Rat_in_a_maze((Dynamic programming-tabulation))
Getting some errors when trying to run this program, can anyone help.pdf
Maze
FilesAssignm3.h#ifndef Assignm3_H#define Assignm3_H.docx
Ad

More from kamdinrossihoungma74 (20)

PDF
WHICH OF THE FOLLOWING LAB EXPERIMENTS DEMONSTRATIONS BEST REPRESEN.pdf
PDF
What advantage is there in placing the two wires carrying an AC sign.pdf
PDF
What are key benefits of enzymes What are key benefits of enzym.pdf
PDF
Using Linux, while a directory may seem empty because it doesnt co.pdf
PDF
Unlike carbohydrates, proteins, and nucleic acids, lipids are define.pdf
PDF
True or False A characteristic of a variable on interval level is t.pdf
PDF
To understand de Broglie waves and the calculation of wave properties.pdf
PDF
Think about the similarities and differences that benign (non-cancer.pdf
PDF
The probability of getting a C in stat is .20. if students attend cl.pdf
PDF
Sally wants to express her gene of interest in E. coli. She inserts .pdf
PDF
Short answers ·GUI elements Static methods and variables Overloading .pdf
PDF
Rectangle class inherits members of Shape class Has one method calle.pdf
PDF
Operating leases have historically been controversial because there .pdf
PDF
Of the ECG traces shown on the back of this page, which one represe.pdf
PDF
Multiple choice of secant functionsI know D isnt the correct ans.pdf
PDF
Part 1 - Written AnswersDownload the GridWriter.zip file and exami.pdf
PDF
Lets suppose that a species of mosquito has two different types of.pdf
PDF
Let X be a random variable with cumulative distribution function F(a.pdf
PDF
John and Mike have been friends since school but havent seen eachoth.pdf
PDF
How can you tell if a URL or Domain is open or closed to the public.pdf
WHICH OF THE FOLLOWING LAB EXPERIMENTS DEMONSTRATIONS BEST REPRESEN.pdf
What advantage is there in placing the two wires carrying an AC sign.pdf
What are key benefits of enzymes What are key benefits of enzym.pdf
Using Linux, while a directory may seem empty because it doesnt co.pdf
Unlike carbohydrates, proteins, and nucleic acids, lipids are define.pdf
True or False A characteristic of a variable on interval level is t.pdf
To understand de Broglie waves and the calculation of wave properties.pdf
Think about the similarities and differences that benign (non-cancer.pdf
The probability of getting a C in stat is .20. if students attend cl.pdf
Sally wants to express her gene of interest in E. coli. She inserts .pdf
Short answers ·GUI elements Static methods and variables Overloading .pdf
Rectangle class inherits members of Shape class Has one method calle.pdf
Operating leases have historically been controversial because there .pdf
Of the ECG traces shown on the back of this page, which one represe.pdf
Multiple choice of secant functionsI know D isnt the correct ans.pdf
Part 1 - Written AnswersDownload the GridWriter.zip file and exami.pdf
Lets suppose that a species of mosquito has two different types of.pdf
Let X be a random variable with cumulative distribution function F(a.pdf
John and Mike have been friends since school but havent seen eachoth.pdf
How can you tell if a URL or Domain is open or closed to the public.pdf
Ad

Recently uploaded (20)

PDF
VCE English Exam - Section C Student Revision Booklet
PDF
A GUIDE TO GENETICS FOR UNDERGRADUATE MEDICAL STUDENTS
PDF
FourierSeries-QuestionsWithAnswers(Part-A).pdf
PDF
Chinmaya Tiranga quiz Grand Finale.pdf
PPTX
1st Inaugural Professorial Lecture held on 19th February 2020 (Governance and...
PPTX
202450812 BayCHI UCSC-SV 20250812 v17.pptx
PPTX
GDM (1) (1).pptx small presentation for students
PDF
GENETICS IN BIOLOGY IN SECONDARY LEVEL FORM 3
PPTX
Lesson notes of climatology university.
PDF
RMMM.pdf make it easy to upload and study
PDF
01-Introduction-to-Information-Management.pdf
PDF
OBE - B.A.(HON'S) IN INTERIOR ARCHITECTURE -Ar.MOHIUDDIN.pdf
PDF
102 student loan defaulters named and shamed – Is someone you know on the list?
PDF
2.FourierTransform-ShortQuestionswithAnswers.pdf
PDF
O7-L3 Supply Chain Operations - ICLT Program
PPTX
Final Presentation General Medicine 03-08-2024.pptx
PPTX
school management -TNTEU- B.Ed., Semester II Unit 1.pptx
PPTX
Tissue processing ( HISTOPATHOLOGICAL TECHNIQUE
PDF
A systematic review of self-coping strategies used by university students to ...
PPTX
Cell Types and Its function , kingdom of life
VCE English Exam - Section C Student Revision Booklet
A GUIDE TO GENETICS FOR UNDERGRADUATE MEDICAL STUDENTS
FourierSeries-QuestionsWithAnswers(Part-A).pdf
Chinmaya Tiranga quiz Grand Finale.pdf
1st Inaugural Professorial Lecture held on 19th February 2020 (Governance and...
202450812 BayCHI UCSC-SV 20250812 v17.pptx
GDM (1) (1).pptx small presentation for students
GENETICS IN BIOLOGY IN SECONDARY LEVEL FORM 3
Lesson notes of climatology university.
RMMM.pdf make it easy to upload and study
01-Introduction-to-Information-Management.pdf
OBE - B.A.(HON'S) IN INTERIOR ARCHITECTURE -Ar.MOHIUDDIN.pdf
102 student loan defaulters named and shamed – Is someone you know on the list?
2.FourierTransform-ShortQuestionswithAnswers.pdf
O7-L3 Supply Chain Operations - ICLT Program
Final Presentation General Medicine 03-08-2024.pptx
school management -TNTEU- B.Ed., Semester II Unit 1.pptx
Tissue processing ( HISTOPATHOLOGICAL TECHNIQUE
A systematic review of self-coping strategies used by university students to ...
Cell Types and Its function , kingdom of life

Java Question help needed In the program Fill the Add statements.pdf

  • 1. Java Question : help needed In the program "Fill the Add statements Area" here area. Sample Output in the picture Consider a maze made up of a rectangular array of squares. The maze will contain a character (either +, -, or |) to represent a blocked square, and to form the walls of the maze. Mazes will have only one entrance at the Coordinate (0, 1), with only one exit in the lower right hand corner of the maze. Beginning at the entrance to the maze, find a path to the exit at the bottom right of the maze. You may only move up, down, left, and right. Each square in the maze can be in one of four states: clear (space), blocked (X), path (.), or visited (*). Initially, after the maze has been read in from the file, each square will be either clear or blocked. If a square lies on a successful path, mark it with a period. If you visit a square but it does not lead to a successful path, mark it as visited with an asterisk. This is the program for it public class Coordinate { public int x; public int y; public Coordinate( int x, int y ) { this.x = x; this.y = y; } public String toString() { return "(" + this.x + "," + this.y + ")"; } @Override public boolean equals( Object object ) { if( object == null ) { return false; } if( ! Coordinate.class.isAssignableFrom( object.getClass() )) { return false; } final Coordinate other = (Coordinate) object; return this.x == other.x && this.y == other.y; } }
  • 2. import java.util.Vector; public class Maze { private char[][] maze; private int height; private int width; /** * Create a new Maze of the specified height and width, initializing every * location as empty, with a ' '. **/ public Maze( int width, int height ) { this.width = width; this.height = height; this.maze = new char [this.width][this.height]; // ADD STATEMENTS HERE } /** * Mutator to allow us to set the specified Coordinate as blocked, * marking it with a 'X' **/ public void setBlocked( Coordinate coord ) { // ADD STATEMENTS HERE } /** * Mutator to allow us to set the specified Coordinate as having been visited, * marking it with a '*' **/ public void setVisited( Coordinate coord ) { // ADD STATEMENTS HERE } /** * Mutator to allow us to set the specified Coordinate as part of the path solution, * marking it with a '.' **/ public void setPath( Coordinate coord ) { // ADD STATEMENTS HERE
  • 3. } /** * Returns the character at the locatio specified by the Coordinate **/ public char at( Coordinate coord ) { // ADD STATEMENTS HERE } /** * Returns a Coordinate array containing all Coordinates that are clear around * the specified coordinate. **/ public Coordinate[] clearAround( Coordinate coord ) { Vector vector = new Vector(); // ADD STATEMENTS HERE // Look at each of the locations around the specified Coordinate, and add it // to the vector if it is clear (i.e. a space) return vector.toArray( new Coordinate[0] ); } /** * Returns a Coordinate that provides the entrance location in this maze. **/ public Coordinate start() { return new Coordinate( 0, 1 ); } /** * Returns a Coordinate that provides the exit location from this maze. **/ public Coordinate end() { // ADD STATEMENTS HERE } /** * The toString() method is responsible for creating a String representation * of the Maze. See the project specification for sample output. Note that * the String representation adds numbers across the top and side of the Maze
  • 4. * to show the Coordinates of each cell in the maze. **/ public String toString() { StringBuilder buffer = new StringBuilder(); // ADD STATEMENTS HERE // First, print out the column headings // Next, print out each row in the maze - note the spaces between // cells to facilitate reading. Each row should include its row number. for(int x=0; x for(int y=0; y buffer.append(maze[x][y]); buffer.append(" "); return buffer.toString(); } } package p2; import java.io.FileNotFoundException; public class MazeSolver { private Maze maze; private LinkedStack path; public MazeSolver( Maze maze ) { // ADD STATEMENTS HERE } public void solve() { // ADD STATEMENTS HERE // Add the starting Coordinate to the maze, and while the Stack has // entries, and the top of the Stack is not the end, continue searching // for the path } public static void main( String[] args ) throws FileNotFoundException { MazeReader reader = new MazeReader( "sampleMaze.txt" ); Maze maze = reader.open(); MazeSolver solver = new MazeSolver( maze );
  • 5. System.out.println( "Before solving" ); System.out.println( maze ); System.out.println( "Start is " + maze.start() ); System.out.println( "End is " + maze.end() ); solver.solve(); System.out.println( "After solving (. shows solution, o shows visited)" ); System.out.println( maze ); } }package p2;import java.util.Scanner;import java.io.File;import java.io.FileNotFoundException;public class MazeReader {private String fileName;private Maze maze;public MazeReader( String fileName ) {this.fileName = fileName;this.maze = null;}public Maze open() throws FileNotFoundException {Scanner scanner = new Scanner( new File( this.fileName ));int width = scanner.nextInt();int height = scanner.nextInt();this.maze = new Maze( width, height );// Remove new line after intscanner.nextLine();// ADD STATEMENTS HERE// You will need to read in each line using the Scanner, and provide// the row number and the line to the addLine method to add it to the Mazereturn this.maze;}private void addLine( int row, String line ) {// ADD STATEMENTS HERE}public static void main( String[] args ) throws FileNotFoundException {MazeReader reader = new MazeReader( "sampleMaze.txt" );Maze maze = reader.open();System.out.println( maze );System.out.println( maze.at( new Coordinate( 0, 0 )));System.out.println( maze.at( new Coordinate( 0, 1 )));}} Solution import java.io.*; class Maze { class MazeSquare { public boolean hasTopWall; public boolean hasRightWall; public boolean hasLeftWall; public boolean hasBottomWall; public MazeSquare() { hasTopWall = hasRightWall = hasLeftWall = hasBottomWall = false;
  • 6. } } class MazeFormatException extends Exception { public final static int noError = 0; public final static int badRowAndColumnCounts = 1; public final static int wrongNumberOfEntriesInRow = 2; public final static int badEntry = 3; public int lineNumber; public int problem; public MazeFormatException( int line, int prob ) { lineNumber = line; problem = prob; } } private int nRows; private int nColumns; MazeSquare[][] square; public static void main( String[] args ) { if( args.length != 1 ) { System.err.println( "Usage: java Maze mazeFileName" ); System.exit( 1 ); } Maze knosos = null; try { knosos = new Maze( args[0] ); } catch( FileNotFoundException e ) { System.err.println( "Can't open " + args[0] + ". Check your spelling." ); System.exit( 1 ); }
  • 7. catch( IOException e ) { System.err.println( "Severe input error. I give up." ); System.exit( 1 ); } catch( MazeFormatException e ) { switch( e.problem ) { case MazeFormatException.badRowAndColumnCounts: System.err.println( args[0] + ", line " + e.lineNumber + ": row and column counts expected" ); break; case MazeFormatException.wrongNumberOfEntriesInRow: System.err.println( args[0] + ", line " + e.lineNumber + ": wrong number of entries" ); break; case MazeFormatException.badEntry: System.err.println( args[0] + ", line " + e.lineNumber + ": non-hexadecimal digit detected" ); break; default: System.err.println( "This should never get printed." ); break; } System.exit( 1 ); } knosos.print( System.out ); } public Maze() { square = null; nRows = nColumns = 0; } public Maze( String fileName ) throws FileNotFoundException, IOException, MazeFormatException
  • 8. { BufferedReader in = null; in = new BufferedReader( new FileReader( fileName ) ); load( in ); in.close(); } public void load( BufferedReader in ) throws MazeFormatException { String line; String[] tokens; int lineNumber = 0; try { line = in.readLine(); lineNumber++; tokens = line.split( "s+" ); nRows = Integer.parseInt( tokens[0] ); nColumns = Integer.parseInt( tokens[1] ); if( nRows <= 0 || nColumns <= 0 ) throw new Exception(); } catch( Exception e ) { throw new MazeFormatException( lineNumber, MazeFormatException.badRowAndColumnCounts ); } // Allocate the 2D array of MazeSquares. square = new MazeSquare[nRows][nColumns]; for( int i=0; i < nRows; i++ ) for( int j=0; j < nColumns; j++ ) square[i][j] = new MazeSquare(); for( int i=0; i < nRows; i++ ) { try { line = in.readLine();
  • 9. lineNumber++; tokens = line.split( "s+" ); if( tokens.length != nColumns ) throw new Exception(); } catch( Exception e ) { throw new MazeFormatException( lineNumber, MazeFormatException.wrongNumberOfEntriesInRow ); } for( int j=0; j < nColumns; j++ ) { int squareValue; try { squareValue = Integer.parseInt( tokens[j], 16 ); } catch( NumberFormatException e ) { throw new MazeFormatException( lineNumber, MazeFormatException.badEntry ); } // These are "bitwise AND" operations. We'll discuss them in class. square[i][j].hasTopWall = ((squareValue & 1) != 0); square[i][j].hasRightWall = ((squareValue & 2) != 0); square[i][j].hasBottomWall = ((squareValue & 4) != 0); square[i][j].hasLeftWall = ((squareValue & 8) != 0); } } } public void print( PrintStream out ) { int i, j; for( i=0; i < nRows; i++ ) { out.print( '+' );
  • 10. for( j=0; j < nColumns; j++ ) { if( i > 0 && square[i][j].hasTopWall != square[i-1][j].hasBottomWall ) out.print( "xxx+" ); else if( square[i][j].hasTopWall ) out.print( "---+" ); else out.print( " +" ); } out.println(); if( nColumns > 0 && square[i][0].hasLeftWall ) out.print( '|' ); else out.print( ' ' ); for( j=0; j < nColumns; j++ ) { if( j < nColumns - 1 && square[i][j].hasRightWall != square[i][j+1].hasLeftWall ) out.print( " X" ); else if( square[i][j].hasRightWall ) out.print( " |" ); else out.print( " " ); } out.println(); } if( nRows > 0 ) { out.print( '+' ); for( j=0; j < nColumns; j++ ) { if( square[nRows-1][j].hasBottomWall ) out.print( "---+" ); else out.print( " +" ); } out.println();
  • 11. } } }