题目:

vue代码

 <template>
<div class="colculate">
<div>
<select v-model="num1" placeholder="数字1">
<option
v-for="item in numLimitList"
:key="item"
:label="item"
:value="item">
</option>
</select>
<select v-model="checkOperate" placeholder="处理符">
<option
v-for="item in operateFlag"
:key="item"
:label="item"
:value="item">
</option>
</select>
<select v-model="checkNum2" placeholder="数字2">
<option
v-for="item in numLimitList"
:key="item"
:label="item"
:value="item">
</option>
</select>
<button class="colculate-btn" @click="colculateNum">Colculate</button>
</div>
<div>Answer: <span class="show-result"> {{value}} </span></div>
</div>
</template> <script lang="ts">
import { Component, Prop, Vue } from "vue-property-decorator"; const operateFlag = ['+', '-', '*', '/']
const numLimitList = Array(100).fill('').map((_, v) => v) @Component
export default class Colculate extends Vue {
@Prop() private msg!: string;
message: string = 'Hello!'
operateFlag: string[] = operateFlag
numLimitList: number[] = numLimitList
num1: number = 0
num2: number = 0
operate: string = '+'
value: any = ''
set checkOperate(nVal: string) {
if (this.num2 === 0 && nVal === '/') {
this.value = '除数不能为0'
} else {
this.operate = nVal
}
}
get checkOperate() {
return this.operate
}
set checkNum2(nVal: number) {
if (this.operate === '/' && nVal === 0) {
this.value = '除数不能为0'
} else {
this.num2 = nVal
}
}
get checkNum2() {
return this.num2
}
colculateNum (): void {
switch (this.operate) {
case '+': this.value = this.num1 + this.num2; break
case '-': this.value = this.num1 - this.num2; break
case '*': this.value = this.num1 * this.num2; break
case '/':
if (this.num2 === 0) {
this.value = '除数不能为0'
} else {
this.value = this.num1 / this.num2;
}
break
default: this.value = '错误的操作符'
}
}
}
</script> <style lang="scss" scoped>
.colculate {}
</style>

详解:

功能-->计算num1和num2不同操作[+-*/]的计算式的结果,

num1-->计算式的第一个值,不需要做任何处理

num2-->计算式的第二个值,注意点:当是除法时,num2不能为0,如果用户操作改为0,则会提示用户‘除数不能为0’

operate-->计算式的操作符,注意点:当num2为0时,如果用户改操作符为'/'时,则会提示用户‘除数不能为0’

点击计算Colculate按钮时计算组成式子的结果,并显示出来

代码:

1、准备操作符的改变时的检查

 set checkOperate(nVal: string) {
if (this.num2 === 0 && nVal === '/') {
this.value = '除数不能为0'
} else {
this.operate = nVal
}
}

2、准备num2值改变时的检查

 set checkNum2(nVal: number) {
if (this.operate === '/' && nVal === 0) {
this.value = '除数不能为0'
} else {
this.num2 = nVal
}
}

3、计算值的方法

 colculateNum (): void {
switch (this.operate) {
case '+': this.value = this.num1 + this.num2 + ''; break
case '-': this.value = this.num1 - this.num2 + ''; break
case '*': this.value = this.num1 * this.num2 + ''; break
case '/':
if (this.num2 === 0) {
this.value = '除数不能为0'
} else {
this.value = this.num1 / this.num2 + '';
}
break
default: this.value = '错误的操作符'
}
}

实际操作:

计算实时处理验证为0的情况

单元测试:

 import { shallowMount } from "@vue/test-utils";
import Colculate from "@/components/Colculate.vue"; describe("Colculate.vue", () => {
it("计算属性是否正确", () => {
const wrapper = shallowMount(Colculate);
wrapper.setData({ num1: 10 });
wrapper.setData({ operate: "*" });
wrapper.setData({ num2: 12 });
const button = wrapper.find(".colculate-btn");
button.trigger("click");
expect(wrapper.vm.$data.value).toEqual("120");
});
// 一般情况下不会出现这种情况
it("当除数为0时,返回结果是除数不能为0", () => {
const wrapper = shallowMount(Colculate);
wrapper.setData({ num1: 10 });
wrapper.setData({ operate: "/" });
wrapper.setData({ num2: 0 });
const button = wrapper.find(".colculate-btn");
button.trigger("click");
expect(wrapper.vm.$data.value).toEqual("除数不能为0");
});
it("[改除数为0时]当除数为0时,返回结果是除数不能为0", () => {
const wrapper = shallowMount(Colculate);
wrapper.setData({ num1: 10 });
wrapper.setData({ operate: "/" });
wrapper.setData({ num2: 5 });
const button = wrapper.find(".colculate-btn");
button.trigger("click");
expect(wrapper.vm.$data.value).toEqual("2");
wrapper.setData({ num2: 0 });
button.trigger("click");
expect(wrapper.vm.$data.value).toEqual("除数不能为0");
});
it("[改操作符为除法时]当除数为0时,返回结果是除数不能为0", () => {
const wrapper = shallowMount(Colculate);
wrapper.setData({ num1: 10 });
wrapper.setData({ operate: "*" });
wrapper.setData({ num2: 0 });
const button = wrapper.find(".colculate-btn");
button.trigger("click");
expect(wrapper.vm.$data.value).toEqual("0");
wrapper.setData({ operate: "/" });
button.trigger("click");
expect(wrapper.vm.$data.value).toEqual("除数不能为0");
});
});

结果

react

import React, { Component } from 'react'

class App extends Component {
constructor() {
super()
this.state = {
showValue: '',
operate: '+',
num1: 0,
num2: 0
}
}
/**
* 修改数字1
*/
handleChangeNum1 = e => {
this.setState({
num1: Number(e.target.value)
})
}
/**
* 修改操作符
*/
handleChangeOperate = e => {
this.setState({
operate: e.target.value
})
}
/**
* 修改数字2
*/
handleChangeNum2 = e => {
this.setState({
num2: Number(e.target.value)
})
}
/**
* 计算计算式
*/
colculateNum = () => {
let showValue = ''
let { num1, num2, operate } = this.state
switch (operate) {
case '+':
showValue = num1 + num2
break
case '-':
showValue = num1 - num2
break
case '*':
showValue = num1 * num2
break
case '/':
if (num2 === 0) {
showValue = '除数不能为0'
} else {
showValue = num1 / num2
}
break
default:
showValue = '错误的操作符'
}
this.setState({
showValue
})
}
render() {
const operateFlag = ['+', '-', '*', '/']
const numLimitList = Array(100)
.fill('')
.map((_, v) => v)
return (
<div className="colculate">
<div>
<select title="数字1" value={this.state.num1} onChange={this.handleChangeNum1}>
{numLimitList.map(function(item) {
return <option value={item} label={item} key={item} />
})}
</select>
<select title="操作符" value={this.state.operate} onChange={this.handleChangeOperate}>
{operateFlag.map(function(item) {
return <option value={item} label={item} key={item} />
})}
</select>
<select title="数字2" value={this.state.num2} onChange={this.handleChangeNum2}>
{numLimitList.map(function(item) {
return <option value={item} label={item} key={item} />
})}
</select>
<button style={{ marginLeft: '10px' }} onClick={this.colculateNum}>
Colculate
</button>
</div>
<div>
Answer: <span className="show-result">{this.state.showValue}</span>
</div>
</div>
)
}
} export default App

一道笔试题(vue,react)的更多相关文章

  1. Java中有关构造函数的一道笔试题解析

    Java中有关构造函数的一道笔试题解析 1.详细题目例如以下 下列说法正确的有() A. class中的constructor不可省略 B. constructor必须与class同名,但方法不能与c ...

  2. 一道笔试题来理顺Java中的值传递和引用传递

      题目如下: private static void change(StringBuffer str11, StringBuffer str12) { str12 = str11; str11 = ...

  3. 一道笔试题和UML思想 ~

    一句软件工程界的名言,让我想起了一个和一道笔试题有关的故事.希望更多的人了解 UML 背后的思想比他的语法更重要,是笔者写作本文的一点小愿望. 一.从一句软件工程名言说起 对很多事情的处理上,东西方都 ...

  4. 由阿里巴巴一道笔试题看Java静态代码块、静态函数、动态代码块、构造函数等的执行顺序

    一.阿里巴巴笔试题: public class Test { public static int k = 0; public static Test t1 = new Test("t1&qu ...

  5. 转:一道笔试题-将int型数组强制转换为char*,再求strlen,涉及大小端

    写出如下程序运行结果: #include<stdio.h> #include<string.h> int main() { int a[2000]; char *p = (ch ...

  6. golang 中 string 转换 []byte 的一道笔试题

    背景 去面试的时候遇到一道和 string 相关的题目,记录一下用到的知识点.题目如下: s:="123" ps:=&s b:=[]byte(s) pb:=&b s ...

  7. 通过一道笔试题浅谈javascript中的promise对象

    因为前几天做了一个promise对象捕获错误的面试题目,所以这几天又重温了一下promise对象.现在借这道题来分享下一些很基础的知识点. 下面是一个面试题目,三个promise对象捕获错误的例子,返 ...

  8. IGT一道笔试题

    1到n连续的n个数 输入m 得出m个有序序列 比如 输入为n=5 ,m=3 则输出 543 542 541 532 531 521  432 431 421 321 当前长度为i,每个位上的取之范围为 ...

  9. 一道笔试题:给定编码规则,实现decode()方法

    public class CodeDecode {     /*变换函数encode()顺序考察已知字符串的字符,按以下规则逐组生成新字符串:       (1)若已知字符串的当前字符不是大于0的数字 ...

随机推荐

  1. 运维自动化神器ansible之group模块

    ansible之group模块 group模块是用来添加或者删除组 首先使用ansible-doc来查看用法 [root@note0 ansible]# ansible-doc -s group - ...

  2. 你的火狐很慢吗? - Firefox启动和运行速度优化

    最近刚开始体验firefox,发现了一些优势和缺点,无敌的扩展确实带来的是功能上的享受,可随之而来的问题便是太多的插件和主题导致ff启动如龟速,比起IE和TW都有不小的差距,因此特意搜集来一些关于启动 ...

  3. Python之——python-nmap的安装与常用方法说明

    一.python-nmap安装 # yum -y install nmap #安装nmap工具# 模块pip方式安装# pip install nmap# 模块源码安装# wget http://xa ...

  4. ‎Cocos2d-x 学习笔记(18) Label

    1. 简介 Label直接继承了Node LabelProtocol BlendProtocol,用于渲染文本,让文本呈现的效果丰富. Label有4种类型,: enum class LabelTyp ...

  5. opencv::调整图像亮度与对比度

    图像变换可以看作如下: - 像素变换 – 点操作 - 邻域操作 – 区域 调整图像亮度和对比度属于像素变换-点操作 //创建一张跟原图像大小和类型一致的空白图像.像素值初始化为0 Mat new_im ...

  6. gperftools::TCMalloc

    VS2013编译gperftools-2.4 1)https://github.com/gperftools/gperftools  下载   gperftools-2.4.zip  版本.2)解压  ...

  7. 面试官,不要再问我“Java虚拟机类加载机制”了

    关于Java虚拟机类加载机制往往有两方面的面试题:根据程序判断输出结果和讲讲虚拟机类加载机制的流程.其实这两类题本质上都是考察面试者对Java虚拟机类加载机制的了解. 面试题试水 现在有这样一道判断程 ...

  8. 高性能封装检测浏览器支持css3属性函数

    css3出来已经很久了,现在来谈判断浏览器是否支持某个css3的属性虽说有点过时了,但是还是可以谈谈的,然后,此篇主要谈的不是判断是否支持,而是怎么封装更好,为什么这么封装,欢迎吐槽. 入题,判断浏览 ...

  9. HTML CSS整理笔记

    ——修改placeholder提示的样式: 1.除IE外通用写法 类名或标签名::placeholder {color: red;}2.加兼容前缀写法 css超出一行显示省略号:给定宽度(width: ...

  10. Shiro learning - 认证流程(3)

    Shiro认证流程 在学习认证流程之前,你应该先了解Shiro的基本使用流程 认证 身份认证: 证明用户是谁.用户需要提供相关的凭证principals(身份标识)和Credentials (凭证,证 ...