Java随即四则运算一百道,除法运算结果要四舍五入除数还不能为零,四舍五入总运行不出来,如何解决?

问题遇到的现象和发生背景

除法运算结果要四舍五入还不能为零,四舍五入总运行不出来

运行结果及报错内容

img

我想要达到的结果

一百道四则运算最后还要在结尾附带结果,怎么解决哇

img


import java.math.BigDecimal;
import java.util.Random;
 
public class Cal {
 
    public static void main(String args[]) {
        
        String[] formulaArr = new String[100];
        String[] resultArr = new String[100];
        
        for(int i=0; i<100; i++) {
            int numOne = getNum();
            String symbol = getSymbol();
            int numTwo = getNum();
            formulaArr[i] = numOne + symbol + numTwo + "=";
            resultArr[i] = getResult(numOne, symbol, numTwo);
        }
        
        for(int i=1; i<=100; i++) {
            if(i % 10 != 0) {
                System.out.print(formulaArr[i-1] + "  ");
            }else {
                System.out.println(formulaArr[i-1]);
            }
        }
        
        System.out.println("正确答案");
        
        for(int i=1; i<=100; i++) {
            if(i % 10 != 0) {
                System.out.print(resultArr[i-1] + "  ");
            }else {
                System.out.println(resultArr[i-1]);
            }
        }
        
    }
    
    public static int getNum() {
        return (int)(Math.random()*(99))+1;
    }
    
    public static String getSymbol() {
        String[] symbolArr = new String[]{"+", "-", "*", "/"};
        int index = new Random().nextInt(symbolArr.length);
        return symbolArr[index];
    }
    
    public static String getResult(int numOne, String symbol, int numTwo) {
        switch (symbol) {
            case "+":
                return String.valueOf(numOne + numTwo);
            case "-":
                return String.valueOf(numOne - numTwo);
            case "*":
                return String.valueOf(numOne * numTwo);
            case "/":
                BigDecimal rs = new BigDecimal(numOne).divide(new BigDecimal(numTwo), 2, BigDecimal.ROUND_HALF_UP);
                return String.valueOf(rs);
            default:
                return "error";
        }
    }
    
}
 

除法结果不为0,只要被除数不是0就行了啊,如果是小学低年级除法,那你应该保证被除数是除数的整数倍
如果是高年级除法,有商有余数,至少被除数应大于除数
想四舍五入,直接round就行了

运行后是这种代码怎么编辑啊求指教~

img

将你现在的代码发出来,我帮你修改

这个不难,我写了一个可以自定义生成多少计算题的方法。有什么懂的可以问我,希望对你有帮助。

public class test {
  public static void main(String[] args) {

    Scanner x = new Scanner(System.in);
    System.out.print("请输入一个整数:");
    int number = x.nextInt();
    try {
      List<BigDecimal> results = new ArrayList<>();
      for (int i = 1; i <= number; i++) {
        // 随机生成数
        Random rd = new Random();
        int data1 = rd.nextInt(100) + 1;
        int data2 = rd.nextInt(100) + 1;
        // 随机生成运算符
        String[] operator = {"*", "/", "+", "-"};
        Random r = new Random();
        int num1 = r.nextInt(4);
        String str = data1 + operator[num1] + data2;
        BigDecimal result;
        BigDecimal bigData1 = new BigDecimal(data1);
        BigDecimal bigData2 = new BigDecimal(data2);
        if (operator[num1] == "+") {
          result = bigData1.add(bigData2);
          results.add(result);
          System.out.print(str + "=" + "\t");
        } else if (operator[num1] == "-") {
          result = bigData1.subtract(bigData2);
          results.add(result);
          System.out.print(str + "=" + "\t");
        } else if (operator[num1] == "*") {
          result = bigData1.multiply(bigData2);
          results.add(result);
          System.out.print(str + "=" + "\t");
        } else if (operator[num1] == "/") {
          result = bigData1.divide(bigData2, 2, RoundingMode.HALF_UP);
          results.add(result);
          System.out.print(str + "=" + "\t");
        }
        // 每10换行
        if (i % 10 == 0) {
          System.out.println("\n");
        }
      }
      System.out.println("\n\n\n计算结果\n\n\n");
      // 结果
      for (int j = 1; j < results.size()+1; j++) {
        System.out.print(String.format("%-8s", results.get(j-1)));
        // 每10换行
        if (j % 10 == 0) {
          System.out.println("\n");
        }
      }

    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}