Java 在制作基本计算器时获得StackOverflower错误
我正在尝试制作一个有4个功能的计算器,这是基于单词的。当我试图实现选择操作时,我得到一个stackoverflow错误 类计算器: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
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=新的计算器;在课程开始时,使用计算器,这似乎不是一个好主意。