import java.util.*; public class AkermanEvaluater { public int evaluate(int m,int n) { StackOfIntegers intStack = new StackOfIntegers(); int initM = m, initN = n; intStack.push(m); intStack.push
; while(true) { try{ n = intStack.pop(); m = intStack.pop(); if(m != 0) { if(n != 0) { intStack.push(m - 1); intStack.push(m); intStack.push(n - 1); } else { intStack.push(m - 1); intStack.push(1); } } else intStack.push(n + 1); }//try catch(EmptyStackException e) { return n; } catch(FullStackException e) { throw new ArithmeticException("Impossible computing the value!"); } }//while }//method }//class class TestAkermanEvaluater { public static void main(String[]args) { Scanner s = new Scanner(System.in); System.out.println("To stop testing enter: m = 0, n = 0"); System.out.println("Starting..."); while(true) { try{ System.out.print(" m = "); int m = s.nextInt(); System.out.print(" n = "); int n = s.nextInt(); if(m == 0 && n == 0) { System.out.println("End of test!"); break; } AkermanEvaluater w = new AkermanEvaluater(); System.out.println("A(" + m + "," + n + ") = " + w.evaluate(m,n)); }catch(ArithmeticException e) { System.out.println(e.getMessage()); } } } } /* m = 0 n = 1 m = 1 n = 1 m = 2 n = 1 m = 3 n = 0 m = 3 n = 1 m = 3 n = 2 m = 3 n = 3 */