能帮我看看我哪儿写的不对吗?最后的结果是错的

import java.util.Scanner;

class calculator{
int x;
int nn(int a,int b) {

    switch(x) {
    case 1: 
        System.out.println(a+"+"+b+"="+(a+b));
        break;
    case 2:
        System.out.println(a+"+"+b+"="+(a-b));
        break;
    case 3:
        System.out.println(a+"+"+b+"="+(a*b));
        break;
    case 4:
        System.out.println(a+"+"+b+"="+(a/b));
        break;
    case 0:
        break;
    }
    return nn(a,b);
}

}
public class Summer {

public static void main(String[] args) {
    // TODO Auto-generated method stub
   calculator ca=new calculator();
   int fnum,snum;
   int m;
   Scanner s=new Scanner(System.in);
  
   System.out.print("Enter fnum:");
   fnum=s.nextInt();
   System.out.print("Enter snum:");
   snum=s.nextInt();
   System.out.print("enter your choice:");
   m=s.nextInt();
   System.out.print(ca.nn(fnum,snum));
}

}

img

1、方法int nn(int a,int b) 中 你在最后写了 return nn(a,b);
这样变了成递归,而且还没有终止条件,最后就会溢出。
2、还是nn方法,定义了x,又没有赋值就直接用了,我看你代码,应该是要作为入参才对。

nn方法第一个参数值是计算类型。

class calculator{
double nn(int fnum, int a, int b) {
        double x = 0;
        switch (fnum) {
            case 1:
                System.out.println(a + "+" + b + "=" + (a + b));
                x = a = b;
                break;
            case 2:
                System.out.println(a + "+" + b + "=" + (a - b));
                x = a - b;
                break;
            case 3:
                System.out.println(a + "+" + b + "=" + (a * b));
                x = a * b;
                break;
            case 4:
                System.out.println(a + "+" + b + "=" + (double) (a / b));
                x = (double) a / b
                break;
            case 0:
                break;
        }
        return x;
    }
}