java - 如何避免堆栈堆积?

标签 java recursion stack callstack code-organization

我正在尝试弄清楚如何编写此方法以避免在异常中递归调用该方法而导致堆栈堆积?

以下是我的指示的措辞:

Read a number, use an exception handler to make sure it is an int number and then add to the ArrayList object, aryList.

这是我的尝试:

public void createOriginalAryList() {

      Scanner keyboard = new Scanner(System.in);

      System.out.println("Enter a number: ");

      try {

         int number = keyboard.nextInt();
         aryList.add(number);

         while(keyboard.hasNextInt()) {

            System.out.println("Enter a number: ");
            number = keyboard.nextInt();
            aryList.add(number);

         }

      } catch(InputMismatchException ime) {
         System.out.println("Invalid number submitted! Try again.");
         createOriginalAryList();
      }

      System.out.println(aryList);
   }

非常感谢任何建议!

最佳答案

只需使用 do-while 循环即可:

Scanner keyboard = new Scanner(System.in);

boolean redo = false;
do {
    System.out.println("Enter a number: ");
    redo = false;
    try {
       int number = keyboard.nextInt();
       aryList.add(number);

       while(keyboard.hasNextInt()) {

          System.out.println("Enter a number: ");
          number = keyboard.nextInt();
          aryList.add(number);

       }

    } catch(InputMismatchException ime) {
       redo = true;
       System.out.println("Invalid number submitted! Try again.");
    }
}
while(redo);
System.out.println(aryList);

由于每次初始化扫描仪键盘都没用,所以放在循环之前。

关于java - 如何避免堆栈堆积?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22367816/

相关文章:

java - 为什么final变量没有内部类就返回?

c++ - 由于在 return 语句中使用了 bool OR 运算,因此递归如何用于以下代码?

python - 无论条件如何,合并排序都会继续调用自身

java - 创建固定大小的堆栈

Java 优先级队列接口(interface)实现

java - 如何在 JavaFX WebView 中显示 HTML 文档

java - 如何在执行junit时模拟某个方法?

java - 需要递归地处理数组,传递数据时遇到麻烦,java

C堆栈奇怪的行为

c++ - 我无法从中得到输出