后端一四则运算
(时间可能有点久了)
产品说明
1.这是使用Spring boot写的一个支持四则运算的API,可以完成加减乘除四种运算
2.特殊情况:输入的数据类型错误、数据溢出(这两个在学习经历中提到)、分母不为0,分母的问题先使用charAt(0)得到第一个数,再用if判断。
学习经历
1.首先模仿神秘学姐手搓代码,完成相应的注解和接口
2.重点是解决数据溢出和判断数据类型
我在弄清楚这两个要求上花费时间较多。灵感来源于这一周的Java课上,老师讲到字符也可以比大小,我突然想到可以通过让每一字符>='0'&& <='9'来实现判断数据类型,至于解决数据溢出,我得到了神秘学姐的友情提醒,用BigDecimal类。
代码和相应注释如下
MainController
package com.example.controller;
import com.example.service.MainService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.math.BigDecimal;
@RestController
@RequestMapping("/")
public class MainController {
@Autowired
MainService mainService;
// 加法
@PostMapping("/add")
public BigDecimal add(@RequestBody String a, String b){
// 下面判断数据类型,调用写好的方法,其他的运算同理,比较占位置,就不一一写上了
while(true){
if(!(MainService.tochar_a(a) == null&& MainService.tochar_b(b) == null))
break;
}
return mainService.add(a , b);
}
// 减法
@PostMapping("/minus")
public BigDecimal minus(@RequestParam String a, String b){
return mainService.minus(a , b);
}
// 乘法
@PostMapping("/mul")
public BigDecimal mul(@RequestParam String a, String b){
return mainService.mul(a , b);
}
// 除法
@PostMapping("/div")
public BigDecimal div(@RequestParam String a, String b){
// 定义一个big,当分母为0时,返回big
BigDecimal big = new BigDecimal(1);
// 下面是判断分母不为0,判断字符串的第一位是否为0
// 如果是0,则不用看后面的值,如果不是0,再判断后面的数据类型
char c = b.charAt(0);
if(c == 48) {
return big;
}
else
return mainService.div(a, b);
}
}
MainService
package com.example.service;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
@Service
public class MainService {
// 为了解决数据溢出,四则运算不采用有上限值的int类型
// 而采用可以无限大的BigDecimal类,调用里面的四则运算的方法,所以需要输入的是一个String类型
// 减法方法
public BigDecimal minus(String a,String b){
BigDecimal front = new BigDecimal(a);
BigDecimal back = new BigDecimal(b);
return front.subtract(back);
}
// 加法方法
public BigDecimal add(String a,String b){
BigDecimal front = new BigDecimal(a);
BigDecimal back = new BigDecimal(b);
return front.add(back);
}
// 乘法方法
public BigDecimal mul(String a,String b){
BigDecimal front = new BigDecimal(a);
BigDecimal back = new BigDecimal(b);
return front.multiply(back);
}
// 除法方法
public BigDecimal div(String a,String b){
BigDecimal front = new BigDecimal(a);
BigDecimal back = new BigDecimal(b);
return front.divide(back);
}
// 判断数据类型,只能是数字。运用字符串的比较大小原理,界于'0'和'9'之间
// 如果不是纯数字,返回空,是纯数字,正常返回
public static char[] tochar_a(String a) {
char[] array = a.toCharArray();
char[] arr = new char[0];
boolean bl = false;
for (int i = 0; i <a>= '0' && array[i] <= '9')
bl = true;
else {
bl = false;
break;
}
}
if (bl)
return array;
else
return arr;
}
public static char[] tochar_b(String b) {
char[] array = b.toCharArray();
char[] arr = new char[0];
boolean bl = false;
for (int i = 0; i <b>= '0' && array[i] <= '9')
bl = true;
else {
bl = false;
break;
}
}
if (bl)
return array;
else
return arr;
}
}