Computer Science 210
Data Structures
Fall 2018, Siena College
VertexSearch BlueJ Project
Click here to download a BlueJ project for VertexSearch.
VertexSearch Source Code
The Java source code for VertexSearch is below. Click on a file name to download it.
/** * Program to read in and perform some searching on METAL vertex data. * * @author Jim Teresco and the Fall 2018 CSIS 210 class at Siena College */ /* Note that wildcards are not being used for imports, and only * precisely those packages that are needed are being imported. * This is a good programming practice to make sure you do not * introduce names and conflicts from over-importing. */ import java.io.File; import java.io.IOException; import java.util.Scanner; public class VertexSearch { /** * main method to run our search * * @param args args[0] is the name of the file to read in */ public static void main(String args[]) { // we'll start with a check to make sure there's a file name // provided on the command line if (args.length != 1) { // System.err is like System.out, except it's used for error messages // rather than normal output. System.err.println("Usage: java VertexSearch filename"); // System.exit kills the program, and its parameter indicates an error // code. A code of 0 means successful completion, and other numbers // indicate problems caused an unsuccessful exit. We'll use 1. System.exit(1); } // A try-catch block will deal with errors opening and closing our file. // We will need to declare any variables we need both inside the block and // once we continue below before the block. Further, if they are initialized // only inside the try block, we need to initialize them here to avoid errors // from Java about potentially using variables that have not been given an // initial value. int numVertices = 0, numEdges = 0; Waypoint points[] = {}; try { Scanner inFile = new Scanner(new File(args[0])); // the first line of the file is a version number, which for now // we can ignore inFile.nextLine(); // the second line is two numbers: the number of vertices and the // number of edges that follow // // for now, we only care about vertices, but we'll read and stor // both anyway for later numVertices = inFile.nextInt(); numEdges = inFile.nextInt(); // construct our array large enough to hold all of our Waypoints points = new Waypoint[numVertices]; // the next numVertices lines each have a string (a vertex label) // followed by two numbers (the latitude and the longitude of the // vertex), so a counting loop can work here for (int vertexNum = 0; vertexNum < numVertices; vertexNum++) { String label = inFile.next(); double lat = inFile.nextDouble(); double lng = inFile.nextDouble(); Waypoint w = new Waypoint(label, lat, lng); points[vertexNum] = w; } inFile.close(); } catch (IOException e) { // if anything bad happened, an exception will be thrown, so we print // the error and exit in that case System.err.println(e); System.exit(1); } System.out.println("Successfully read in " + numVertices + " vertex entries."); System.out.println("Ignored " + numEdges + " edge entries."); Waypoint north, south, east, west; north = points[0]; south = points[0]; east = points[0]; west = points[0]; for (int check = 1; check < numVertices; check++) { // check if further north than "north" if (points[check].getLat() > north.getLat()) { north = points[check]; } // check if further south than "south" if (points[check].getLat() < south.getLat()) { south = points[check]; } // check if further east than "east" if (points[check].getLng() > east.getLng()) { east = points[check]; } // check if further west than "west" if (points[check].getLng() < west.getLng()) { west = points[check]; } } System.out.println("North: " + north); System.out.println("South: " + south); System.out.println("East: " + east); System.out.println("West: " + west); } }
/** * Class to represent one waypoint from a METAL TMG file. * * @author Jim Teresco and the CSIS 210 Fall 2018 class */ public class Waypoint { // instance variables to hold label, latitude and longitude private String label; private double lat; private double lng; // constructor for a Waypoint object public Waypoint(String label, double lat, double lng) { this.label = label; this.lat = lat; this.lng = lng; } // accessors for fields public String getLabel() { return label; } public double getLat() { return lat; } public double getLng() { return lng; } public String toString() { return label + " (" + lat + "," + lng + ")"; } }