2015-03-03 2 views
-1

Так что я пытаюсь сделать пару утверждений try-catch в моем оценщике выражений Postfix, чтобы поймать исключения, которые появятся из входного файла. Мне просто нужна помощь в создании этих утверждений try-catch.Использование блоков try-catch для различных исключений (java)

Так что выходной ток:

5 
2 
1 
8 
-4 
2 
-4 
Exception in thread "main" java.util.EmptyStackException 
    at LinkedStack.pop(LinkedStack.java:44) 
    at PostFix.postfixEvaluation(PostFix.java:171) 
    at PostFix.readFromTheFile(PostFix.java:49) 
    at PostFix.main(PostFix.java:21) 

в то время как я хочу его к выходу:

5 
2 
1 
8 
-4 
2 
-4 
ERROR: java.lang.RuntimeException: Bad character input: " " 
ERROR: java.util.EmptyStackException for 1+1 
ERROR: java.util.EmptyStackException for 11+* 
ERROR: java.util.EmptyStackException for +11 
ERROR: java.lang.RuntimeException: Bad character input: "@" 

Входной файл содержит:

511+93/2-932/-149657%/*-+14+96*5/7%-149-+6*57%/  1+111+*[email protected] 

Вот мой текущий метод для код, блоки try-catch перейдут сюда:

public static Integer postfixEvaluation(String input){ 



     StackInterface<Integer> stack = new LinkedStack<Integer>(); 

     Integer result = new Integer(0); 



     for(int i=0;i<input.length();i++){ 

     String characterNum = input.substring(i, i+1); 

     Integer integer1 = new Integer(0); 
     Integer integer2 = new Integer(0); 






     if (characterNum.equals("0")) { 
      Integer character = (Integer.valueOf(characterNum)); 
      stack.push(character); 

     } 
     else if (characterNum.equals("1")) { 
      Integer character = (Integer.valueOf(characterNum)); 
      stack.push(character); 

     } 
     else if (characterNum.equals("2")) { 
      Integer character = (Integer.valueOf(characterNum)); 
      stack.push(character); 
     } 
     else if (characterNum.equals("3")) { 
      Integer character = (Integer.valueOf(characterNum)); 
      stack.push(character); 
     } 
     else if (characterNum.equals("4")) { 
      Integer character = (Integer.valueOf(characterNum)); 
      stack.push(character); 
     } 
     else if (characterNum.equals("5")) { 
      Integer character = (Integer.valueOf(characterNum)); 
      stack.push(character); 
     } 
     else if (characterNum.equals("6")) { 
      Integer character = (Integer.valueOf(characterNum)); 
      stack.push(character); 
     } 
     else if (characterNum.equals("7")) { 
      Integer character = (Integer.valueOf(characterNum)); 
      stack.push(character); 
     } 
     else if (characterNum.equals("8")) { 
      Integer character = (Integer.valueOf(characterNum)); 
      stack.push(character); 
     } 
     else if (characterNum.equals("9")) { 
      Integer character = (Integer.valueOf(characterNum)); 
      stack.push(character); 
     } 
     else if (characterNum.equals("*")) { 
      integer2 = stack.pop(); 
      integer1 = stack.pop(); 


      result = integer1 * integer2; 


      stack.push(result); 



     } 
     else if (characterNum.equals("/")) { 
      integer2 = stack.pop(); 
      integer1 = stack.pop(); 

      result = integer1/integer2; 


      stack.push(result); 

     } 
     else if (characterNum.equals("%")) { 
      integer2 = stack.pop(); 
      integer1 = stack.pop(); 


      result = integer1 % integer2; 


      stack.push(result); 
     } 
     else if (characterNum.equals("+")) { 
      integer2 = stack.pop(); 
      integer1 = stack.pop(); 


      result = integer1 + integer2; 


      stack.push(result); 

     } 
     else if (characterNum.equals("-")) { 
      integer2 = stack.pop(); 
      integer1 = stack.pop(); 

      result = integer1 - integer2; 


      stack.push(result); 

     } 




     } 
    return result; 
    } 

Любая помощь будет принята с благодарностью

ответ

1

когда вы получаете любой символ первый чек является символ пустым, если да, то через пользовательские исключения.

if(characterNum.equals("")){ 
    throw new BadCharacterException(" Bad character input: \" \""); 
} 
+0

Хм .. а как насчет других 3 EmptyStackExceptions? Теперь я понимаю BadCharacterExceptions! – CMcorpse

0

Если я вас хорошо понимаю, вы не исключаете исключения, сгруппированные в конце приложения. Я думаю, что вы можете просто воспользоваться своими исключениями, как обычно (например, atish shimpi answare), а затем в catch catch обрабатывать исключение, нажимая их на какую-то коллекцию fifo. И после того, как весь вход обрабатывается, просто распечатайте его.

Я бы выбрал проверенное исключение здесь и обработаю печать исключений на месте, где вы их печатаете. Тогда вы можете решить, хотите ли вы остановиться, как форматировать сообщение и т. Д.

Смежные вопросы