Exemplo n.º 1
0
  /**
   * 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;
  }
Exemplo n.º 2
0
  /**
   * 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;
              }
            }
          }
        }
      }
    }
  }