/** * get's user input of string and gets individual characters and puts them in a Stack computes * each value of the string * * @param input user input of string * @return total value of the Roman numeral that user input */ public int stackRomanNumeral(LinkedList list, int switcher) { boolean stop = false; int counter = list.getSize() - 1; CharacterStack stack1 = new CharacterStack(); CharacterStack stack2 = new CharacterStack(); // gets last roman numeral while (!stop) { if (list.getData(counter) != '+' && list.getData(counter) != '-' && list.getData(counter) != '*' && list.getData(counter) != '/') { stack1.push(list.getData(counter)); } else { stop = true; } counter--; } stop = false; while (!stop) { if (list.getData(counter) != '+' && list.getData(counter) != '-' && list.getData(counter) != '*' && list.getData(counter) != '/') { stack2.push(list.getData(counter)); } counter--; if (counter <= 0) { stop = true; } } CharacterStack input; if (switcher == 1) { input = stack2; } else { input = stack1; } RomanNumeral numeral = new RomanNumeral(); int total = 0; int lastNumber = 0; boolean error = false; char[] charArray = new char[size[this.counter - 1]]; counter++; for (int ii = charArray.length - 1; ii >= 0; ii--) { charArray[ii] = input.pop(); } // goes through each stack and computes value for (int ii = 0; ii < charArray.length; ii++) { // converts character into a value and assigns in Roman value int romanValue = numeral.getRomanValue(charArray[ii]); // numeral.getRomanValue(input.pop()); if (romanValue == 0) { System.out.println("Error in roman numeral syntax."); System.out.println(""); error = true; } else { total = numeral.computeRomanNumeral(romanValue, lastNumber, total); lastNumber = romanValue; } } // if error is detected in Roman numeral, will return a value of zero if (error == true) { total = 0; } return total; }
/** * Checks to see if user input is a valid Roman Numeral * * @param input User input of roman numeral * @return a true or false value if validation is true or not */ public boolean validateRomanNumeral(CharacterStack stack) { char[] input = new char[stack.getSize()]; counter++; size[counter] = stack.getSize(); for (int ii = 0; ii < input.length; ii++) { input[ii] = stack.pop(); } Verifier verify = new Verifier(input); int stringLength = input.length; boolean validInput = verify.checkIndividualChar(input); if (validInput == false) { System.out.print("Error: "); System.out.println("There is a character in your input that is not part of a Roman Numeral."); System.out.println(""); return false; } else { // System.out.println("Check individualChar validation successful."); if (stringLength == 1) { return true; } else { boolean isThereRepeats = verify.checkThreeOrMoreNumerals(input); if (isThereRepeats == true) { System.out.print("Error: "); System.out.println("There are more than three consecutive Roman characters."); System.out.println(""); return false; } else { // System.out.println("Check for three or more numerals validation successful"); boolean validRepeats = verify.checkDuplicatesValidTens(input); if (validRepeats == false) { System.out.print("Error: "); System.out.println("There is an invalid roman character consecutively entered"); System.out.println(""); return false; } else { // System.out.println("Check for valid tens power duplicates validation successful"); boolean invalidSmallPower = verify.checkPowerLeftOfNumeral(input); if (invalidSmallPower == true) { System.out.print("Error: "); System.out.println( "There is an invalid roman character left a larger roman character"); System.out.println(""); return false; } else { // System.out.println("Check for valid powers left of larger numbers successful."); boolean invalidPower = verify.checkPowerFrontOfNumeral(input); if (invalidPower == true) { System.out.print("Error: "); System.out.println( "There is an invalid roman character front of a larger roman character"); System.out.println(""); return false; } else { // System.out.println("Check for valid powers front of larger numbers successful"); return true; } } } } } } }