Spring boot四则运算的API
产品说明
1.使用方法
(话说前三个标题在一行是要怎么处理(我是很菜的小白捏))
该产品可以进行实数的四则运算(没有做整数(懒了)),使用方法如下,比如,我想计算x和y进行四则运算时,我可以手动修改 URL 以获取结果。
- 加法:http://localhost:8080/cal/add?a=x&b=y
- 减法:http://localhost:8080/cal/minus?a=x&b=y
- 乘法:http://localhost:8080/cal/multi?a=x&b=y
- 除法:http://localhost:8080/cal/divide?a=x&b=y
2.特殊情况
由于能力有限,所以只考虑两种特殊情况:
- 数据类型错误
我处理的思路是这样的:无论输入的数据是什么,我只有先接收了数据才能进行判断数据类型问题,而String字符串类型数据可以接收所有数据,所以我把输入的数据类型均声明为String,而下一步就是查阅(copy)网上有关判断String型数据是否能转成double型数据的代码,同时,在输出数据的类型改成String,有助于当出现错误时发送错误情况的类型,同时也可以将计算后的double类型(我的加减乘用的是bigdecimal,但是由于做除法时候会报错,于是还是用回了double类型的直接计算)转换成String型数据输出。这样一来,输入输出都可以得到处理并得到相应情况的数据。
2.做除法时候除数为0
在处理这个问题的时候,我先判断了数据是否能转换成Double型数据,如果可以,先转换成Double型,然后用条件语句判断除数是否为0,为0则输出数字错误,不为0再输出项对应的值。
学习历程
首先我先学习了一下基本的Spring boot的用法,然后写出了最简单版本的四则运算,后来在考虑数据类型报错的过程,我了解到了regex类和bigdecimal类的用法,对于数据类型的判断和互相转换以及转换操作的可行性判断都有了新的了解,并且觉得这是可以重复运用在未来有需要进行输入数据时候对数据类型的判断和计算。
我的知识还是学的太少,所以很难把这些讲清楚,所以只能到这里就结束了。
我的代码
package com.example.fistspringboot.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
import java.math.BigDecimal;
@RestController
public class main {
public static boolean isNumber(String string){
if (string == null){
return false;
}
Pattern pattern = Pattern.compile("[0-9]+[.]{0,1}[0-9]*[dD]{0,1}");
Matcher isnum =pattern.matcher(string);
if(!isnum.matches()){
return false;
}
return true;
}
@GetMapping("/cal/add")
public String add(@RequestParam String a , @RequestParam String b){
if(isNumber(a)&isNumber(b)){
BigDecimal b1 = new BigDecimal(a);
BigDecimal b2 = new BigDecimal(b);
return b1.add(b2).toString();
}
else{
return "Wrong input";
}
}
@GetMapping("/cal/minus")
public String minus(@RequestParam String a, @RequestParam String b){
if(isNumber(a)&isNumber(b)){
BigDecimal b1 = new BigDecimal(a);
BigDecimal b2 = new BigDecimal(b);
return b1.subtract(b2).toString();
}
else{
return "Wrong input";
}
}
@GetMapping("/cal/mult")
public String mutli(@RequestParam String a, @RequestParam String b){
if(isNumber(a)&isNumber(b)){
BigDecimal b1 = new BigDecimal(a);
BigDecimal b2 = new BigDecimal(b);
return b1.multiply(b2).toString();
}
else{
return "Wrong input";
}
}
@GetMapping("/cal/divide")
public String divide(@RequestParam String a, @RequestParam String b) {
if(isNumber(a)&isNumber(b)){
double a1 = Double.parseDouble(a);
double a2 = Double.parseDouble(b);
if (a2 == 0) {
return "Wrong Number";
}
else {
String c = "" + a1 / a2;
return c;
}
}
else{
return "Wrong input";
}
}
}