Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在制作基本计算器时获得StackOverflower错误_Java_Calculator_Stack Overflow - Fatal编程技术网

Java 在制作基本计算器时获得StackOverflower错误

Java 在制作基本计算器时获得StackOverflower错误,java,calculator,stack-overflow,Java,Calculator,Stack Overflow,我正在尝试制作一个有4个功能的计算器,这是基于单词的。当我试图实现选择操作时,我得到一个stackoverflow错误 类计算器: package us.plexproductions.main; import java.util.Scanner; public class Calculator { public static int firstnum; public static int secondnum; public static int answer; public static

我正在尝试制作一个有4个功能的计算器,这是基于单词的。当我试图实现选择操作时,我得到一个stackoverflow错误

类计算器:

package us.plexproductions.main;

import java.util.Scanner;

public class Calculator {

public static int firstnum;
public static int secondnum;
public static int answer;
public static int operation;

Calculator c = new Calculator();
static Scanner s = new Scanner(System.in);

static Operations o = new Operations();

public static void main(String[] args) {

    prompt();
    start();
}

public static void prompt() {
    System.out.println("########################");
    System.out.println("#Calculator Version 1.0#");
    System.out.println("########################");
    System.out.println("************************");
    System.out.println("This is a calculator that\ncan add, subtract, multiply, and divide\n" +
                       "multiple numbers at once.");
    System.out.println("------------------------");
    System.out.println("Start Calculating by Entering A Number and Then\nspelling out the operation you " +
                       "want to preform to that\nnumber and type in another number.");
}

public static void start() {
    System.out.println("------------------------");
    System.out.println("Enter Your First Number: ");
    firstnum = s.nextInt();
    System.out.println("------------------------");
    System.out.println("Which operation would you like to use?\nAddition = 1, Subtraction = 2, Multiplication = 3, or Division = 4?");
    operation = s.nextInt();
    second();

}

public static void second() {
    if (operation == 1) {
        o.addition();
    }
    if (operation == 2) {
        o.subtraction();
    }
    if (operation == 3) {
        o.multiplication();
    }
    if (operation == 4) {
        o.division();
    }
}
}
班级作业:

package us.plexproductions.main;

import java.util.Scanner;

public class Operations {

Calculator c = new Calculator();
Scanner s2 = new Scanner(System.in);

public void addition() {
    System.out.println("Addition Selected.");
    System.out.println("Enter Second Number: ");
    Calculator.secondnum = s2.nextInt();
}

public void subtraction() {

}

public void multiplication() {

}

public void division() {

}
}
计算器的每个实例都为字段c创建一个新的计算器。这些计算器,反过来,创造更多的计算器,等等

之所以发生StackOverflowerError,是因为对计算器构造函数的调用序列永远不会结束,会填满所有可用的堆栈内存。您似乎不需要该嵌套计算器,因此请尝试将其删除。

当您调用太多函数时,会发生StackOverflower错误,耗尽所有可用的函数。递归函数调用次数太多时可能会发生这种情况。例如,以下阶乘函数在我的计算机上溢出:

public class Factorial {
    public static int factorial(int n){
        if (n == 1) return 1;
        return n * factorial(n-1);
    }

    public static void main(String[] args){
        factorial(10000);
    }
}
现在,在代码中使用递归的位置是什么

public class Calculator{
    Calculator c = new Calculator();
    ...
}

在调试器中单步执行代码时会发生什么?在这里转储大量代码并说我得到了StackOverflower错误!发生了什么?没有表现出太多的努力来解决你自己的问题。你可以看看你有计算器c=新的计算器;在课程开始时,使用计算器,这似乎不是一个好主意。