软件园学生在线

  • {{ item.name }}
  • 2023试用期

登录与注册

【后端一】 高靖原

  • 高 靖原
  • 2022-10-10
  • 0

支持四则运算的API


一. 产品说明

  1. 产品功能
    ·整数值的加法运算,具体操作方法为在浏览器中输入localhost:8080/add?a=num1&b=num2
    (num1和num2代表两个具体的整数)
    ·整数值的减法功能,具体操作方法为在浏览器中输入localhost:8080/subtract?a=num1&b=num2
    ·整数值的乘法功能,具体操作方法为在浏览器中输入localhost:8080/multiply?a=num1&b=num2
    ·整数值的除法功能,具体操作方法为在浏览器中输入localhost:8080/divide?a=num1&b=num2
  2. 考虑的特殊情况
    ·整数型数值在进行四则运算时会出现所得结果溢出,即超出int型值的范围,这种情况该如何判断,为解决此问题,我写了如下代码

    int r= a + b;  
    if(((a^r)&(b^r))<0){
        throw new ArithmeticException("integer overflow");
    }
    return r;

    上述为加法运算的代码,当输出值溢出时浏览器和控制台如下图


    减法和除法我就不一一展示了,具体代码请看文末
    ·在进行除法时,如果变量类型设置为int,那么在进行运算的时候就会出现3/2=1的情况,因此,我把int型变量改为double型变量,这样得到的结果中才有小数部分

二. 学习历程

  1. 文档学习
    在学习部长大大亲自编写的文档过程中,部长大大用清晰易懂,幽默诙谐的文字让我最快速度get到了其中精妙的知识,get到的知识主要如下:
    ·REST API API是一种应用程序接口,通俗来讲,就是用户可以通过API实现对应用程序中某个数据的操作如修改或者调用,而REST API则是一种通过http来调用的API,可以理解为一种URL,即一个网址
    ·GET请求 GET就英文翻译的意思的得到,当你向一个API发送GET请求时,你会得到相应的信息,例如,当你向baidu.com发送GET请求时,你就会得到百度的源代码,进而进行各种操作(POST请求现在了解甚少,就不说了)
    ·Spring Boot 在培训的时候跟着部长大大用Spring Boot做了一个比较简单的a+b的API,让我们简单了解了操作步骤以及注解的作用,但是现在本人对注解的理解还有所欠缺,所以就不细说了
  2. 拓展学习
    ·上述提到我考虑了整型数值在运算时可能出现溢出的情况,以上面提到的加法部分的代码为例,想判断结果是否溢出,原理很简单,只有两个正数或两个负数相加结果才会溢出,而且溢出后的结果一定与原值相反,除原理外,需要用到"^"以及"&","^"的作用是把两个数字转换成二进制,然后从高位开始比较,同为0异为1,这里只看符号位,"&"的作用是,两边都为1才是1,一个为0就是0,当结果溢出时,r与a,b的符号相反,((a^r)&(b^r))的结果为1,所以会小于0,因此结果溢出;减法的原理与加法相似;乘法的原理先把int型变量转换为long型,再进行运算,之后再转换为int型,与转换前进行比较,如果值不想同,则说明结果溢出;除法是不会出现溢出的情况的,所以不用考虑
  3. 存疑
    ·如果在输入的时候数值就溢出,控制台是不会出现上面图片中的情况的,可不可以限制输入值的范围或者判断输入值是否溢出
    ·怎么判断数据类型,如输入的时候输入字符串,我查看了相关网站,是要用到typeof还是instanceof还是其他什么,具体应用到代码中怎么使用
    ·怎么避免直接在url中输入参数,貌似好像需要用到POST,上次培训的时候提到过POST可以用来传递密码之类的信息,但是不晓得具体怎么搞

三. 产品代码

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class MainController {

@GetMapping("/add")
public static int add(@RequestParam int a, @RequestParam int b){
    int r = a + b;

    if(((a^r)&(b^r))<0){
        throw new ArithmeticException("integer overflow");
    }
    return r;
}

@GetMapping("/subtract")
public static int subtract(@RequestParam int a, @RequestParam int b){
    int r= a - b;

    if(((a^b)&(a^r))<0){
        throw new ArithmeticException("integer overflow");
    }
    return r;
}

@GetMapping("/multiply")
public int multiply(@RequestParam int a, @RequestParam int b){
    long r = (long)a * (long)b;

    if((int)r!=r){
        throw new ArithmeticException("integer overflow");
    }
    return (int)r;
}

@GetMapping("/divide")
public double divide(@RequestParam double a, @RequestParam double b){
    return a / b;
}
}
高 靖原
高 靖原
© 2026 软件园学生在线
Theme by Wing