I am trying to write some kind of a stack calculator.
Here is a part of my code where I am handling a push
command. I want to push integers only, so I have to get rid of any invalid strings like foobar
(which cannot be parsed into integer) or 999999999999
(which exceeds the integer range).
strings
in my code is a table of strings containing commands like POP
or PUSH
, numbers, and random clutter already split by white characters.
I've got difficulties with throwing an exception for long parseNumber = Long.parseLong(strings[i]);
- I don't know how to handle the case, when strings[i]
cannot be parsed into a long
and subsequently into an integer
.
while (i < strings.length) {
try {
if (strings[i].equals("PUSH")) {
// PUSH
i++;
if (strings[i].length() > 10)
throw new OverflowException(strings[i]);
// How to throw an exception when it is not possible to parse
// the string?
long parseNumber = Long.parseLong(strings[i]);
if (parseNumber > Integer.MAX_VALUE)
throw new OverflowException(strings[i]);
if (parseNumber < Integer.MIN_VALUE)
throw new UnderflowException(strings[i]);
number = (int)parseNumber;
stack.push(number);
}
// Some options like POP, ADD, etc. are omitted here
// because they are of little importance.
}
catch (InvalidInputException e)
System.out.println(e.getMessage());
catch (OverflowException e)
System.out.println(e.getMessage());
catch (UnderflowException e)
System.out.println(e.getMessage());
finally {
i++;
continue;
}
}
Long.parseLong(String str)
throws a NumberFormatException
if the string cannot be parsed by any reason. You can catch the same by adding a catch block for your try, as below:
catch ( NumberFormatException e) {
System.out.println(e.getMessage());
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With