rendered paste bodyimport java.io.*;public class A4Q1{ public static void main(String args[]) { run(); } public static void run() { LinkedList list = new LinkedList(); readInput("A4data.txt", list); list.print(); // read in command // store variable || process command || fail } /* * Reads numbers from file that are seprated by white space. */ //public static LinkedList readInput(String fileName) public static void readInput(String fileName, LinkedList list) { BufferedReader fileIn; String inputLine = ""; String text = ""; try { fileIn = new BufferedReader(new FileReader(fileName)); inputLine = fileIn.readLine(); while( inputLine != null ) { processString(inputLine, list); //processString(inputLine, list); inputLine = fileIn.readLine(); } fileIn.close(); //return list; } catch( IOException ioe ) {} //return null; } public static void processString(String LOC, LinkedList list) { final int NEWONEVAR = 1; final int NEWONEINT = 2; final int TWOVAR = 1; final int INTVAR = 2; final int VARINT = 3; final int INTINT = 4; int statusCode; int firstNodePosition, secondNodePosition, thirdPosition; String[] stringElements = LOC.trim().split("\\s+"); if( stringElements.length == 3 ) { statusCode = validate3(stringElements); if(statusCode > 0) { echo("OK!"); firstNodePosition = list.search(stringElements[0]); if( firstNodePosition > 0) { if( statusCode == NEWONEINT ) { list.getNode(firstNodePosition).getVariable().setValue(stringToInt(stringElements[2])); } if( statusCode == NEWONEVAR ) { secondNodePosition = list.search(stringElements[2]); if( secondNodePosition > 0 ) { list.getNode(firstNodePosition).getVariable().setValue(list.getNode(secondNodePosition).getVariable().getValue()); } } } else { if( statusCode == NEWONEINT ) { list.add(new Variable(stringElements[0], stringToInt(stringElements[2]))); } if( statusCode == NEWONEVAR ) { secondNodePosition = list.search(stringElements[2]); if( secondNodePosition > 0 ) { list.add(new Variable(stringElements[0], list.getNode(secondNodePosition).getVariable().getValue())); } } } } else echo("Status", statusCode); } else if( stringElements.length == 5 ) { statusCode = validate5(stringElements); if(statusCode > 0) echo("OK!"); else echo("Status", statusCode); } else if( (stringElements.length == 1) && stringElements[0].equals("Q") ) { list.print(); list.destroy(); echo("Quit."); } else echo("Invalid!", LOC); } public static int validate3(String[] stringElements) { final int ONEVAR = 1; final int ONEINT = 2; String term1, term2; term1 = stringElements[0]; term2 = stringElements[2]; // ERRORS if(! stringElements[1].equals("=") ) return -1; if(! validVariableName(term1) ) { return -2; } if(! (validVariableName(term2) || validIntegerConstant(term2)) ) { return -3; } // SUCCESSES if( validVariableName(term2) ) { return ONEVAR; } if( validIntegerConstant(term2) ) { return ONEINT; } return 0; } public static int validate5(String[] stringElements) { final int TWOVAR = 1; final int INTVAR = 2; final int VARINT = 3; final int INTINT = 4; String term1, term2, term3; term1 = stringElements[0]; term2 = stringElements[2]; term3 = stringElements[4]; // ERRORS if(! stringElements[1].equals("=") ) return -1; if(! validVariableName(term1) ) { return -2; } if(! (validVariableName(term2) || validIntegerConstant(term2)) ) { return -3; } if(! (validVariableName(term3) || validIntegerConstant(term3)) ) { return -4; } if(! isValidOperator(stringElements[3].charAt(0)) ) { return -5; } // SUCCESSES if( validVariableName(term1) && validVariableName(term2) ) { return TWOVAR; } if( validIntegerConstant(term1) && validVariableName(term2) ) { return INTVAR; } if( validVariableName(term1) && validIntegerConstant(term2) ) { return VARINT; } if( validIntegerConstant(term1) && validIntegerConstant(term2) ) { return INTINT; } return 0; } public static boolean isChar(char c) { return ((c >= 'a')&&(c <= 'z')); } public static boolean isInt(char c) { return ((c >= '0')&&(c <= '9')); } public static boolean isCharOrInt(char c) { return ( ((c >= 'a')&&(c <= 'z')) || ((c >= '0')&&(c <= '9')) ); } public static boolean isValidOperator(char c) { return ( (c == '/')||(c == '+')||(c == '-')||(c == '*') ); } public static boolean validVariableName(String element) { String mask = element.toLowerCase(); if(! mask.equals(element) ) return false; if(! isChar(element.charAt(0)) ) return false; for( int i = 1; i < element.length(); i++ ) { if(! isCharOrInt(element.charAt(i)) ) return false; } return true; } public static boolean validIntegerConstant(String element) { String mask = element.toLowerCase(); if(! mask.equals(element) ) return false; for( int i = 0; i < element.length(); i++ ) { if(! isInt(element.charAt(i)) ) return false; } return true; } public static int stringToInt(String Number) { int i; try { i = Integer.parseInt(Number); } catch( NumberFormatException ex ) { return -1; } return i; } public int calculateResult(int i, char c, int j) { if( c == '/' ) { if( j == 0 ) return 0; return i / j; } if( c == '*' ) return i * j; if( c == '+' ) return i + j; if( c == '-' ) return i - j; return 0; } public static void echo(String string) { System.out.println(string); } public static void echo(String string, int value) { System.out.println(string + value); } public static void echo(String arg1, String arg2) { System.out.println(arg1 +" "+ arg2); }}class LinkedList{ final int NOTFOUND = 0; final int FOUND = 1; private Node head; private int elements; public LinkedList() { head = null; elements = 0; } public void add(Variable variable) { if( head == null ) { head = new Node(variable, null); } else { head = new Node(variable, head); } elements++; } public int search(String name) { Node current = head; int position = 0; while( current != null ) { position++; if( current.getVariable().getName().equals(name) ) return position; current = current.getNext(); } return NOTFOUND; } public Node getNode(int pos) { Node current = head; if( pos > elements ) return null; for( int i = 1; i < pos; i++ ) { current = current.getNext(); } return current; } public void print() { Node current = head; System.out.println("\n\nStart Print\n##########################################################\n\n\n"); while( current != null ) { System.out.println(current); current = current.getNext(); } System.out.println("\n\n\n##########################################################\nEnd Print\n\n"); } public void destroy() { head = null; }}class Node{ private Variable variable; private Node next; public Node(Variable variable, Node next) { this.variable = variable; this.next = next; } public Node getNext() { return next; } public void setNext(Node next) { this.next = next; } public Variable getVariable() { return variable; } public String toString() { return variable.getName() + " = " + variable.getValue(); }}class Variable{ private String name; private int value; public Variable(String name, int value) { this.name = name; this.value = value; } public void setValue(int value) { this.value = value; } public String getName() { return name; } public int getValue() { return value; }}