package exercise.situation; import java.io.*; import java.util.*; public class SituationSolution { public static final int UNSPECIFIED_NUM_REQUIRED = SituationExercise.UNSPECIFIED_NUM_REQUIRED; public static final int ALL_REQUIRED = SituationExercise.ALL_REQUIRED; protected String exerciseID; protected int numRequired; // Outer index ranges over situations, inner index ranges over variables. // The array elements give the variable values. The set of situations // is exhaustive. Right now all situations must be totally-specified. // At some point it might be nice to allow for "don't care" variables. protected int[][] situations; public SituationSolution(String exerciseID, int numRequired, int[][] situations) { this.exerciseID = exerciseID; this.numRequired = numRequired; this.situations = situations; } public String getExerciseID() { return exerciseID; } public int getNumRequired() { return numRequired; } public int[][] getSituations() { return situations; } public static SituationSolution loadSolution(String exerciseID) throws IOException { // Open a buffered reader to the Solution file. Class cl = SituationSolution.class; String resourceName = "solutions/" + exerciseID + ".txt"; InputStream is = cl.getResourceAsStream(resourceName); InputStreamReader isr = new InputStreamReader(is); BufferedReader br = new BufferedReader(isr); // Get the number of situations required of the student. int numRequired = Integer.parseInt(br.readLine()); // Get the solution situations. Vector lines = new Vector(); String line; while ((line = br.readLine()) != null) { lines.add(line); } int numLines = lines.size(); int[][] situations = new int[numLines][]; for (int i = 0; i < numLines; i++) { String s = (String)lines.get(i); int numVars = s.length(); situations[i] = new int[numVars]; for (int j = 0; j < numVars; j++) { situations[i][j] = Integer.parseInt(s.substring(j, j+1)); } } // Close the buffered reader. br.close(); // Return a Solution object. return new SituationSolution(exerciseID, numRequired, situations); } }