java计算器༼༎ຶᴗ༎ຶ༽༼༎ຶᴗ༎ຶ༽༼༎ຶᴗ༎ຶ༽༼༎ຶᴗ༎ຶ༽,又是掉发的一天
题目:
给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。
注意:不允许使用任何将字符串作为数学表达式计算的内置函数,比如 eval() 。
示例 1:
输入:s = "1 + 1"
输出:2
示例 2:
输入:s = " 2-1 + 2 "
输出:3
示例 3:
输入:s = "(1+(4+5+2)-3)+(6+8)"
输出:23
提示:
1 <= s.length <= 3* 105
s 由数字、'+'、'-'、'('、')'、和 ' ' 组成
s 表示一个有效的表达式
'+' 不能用作一元运算(例如, "+1"和 "+(2 + 3)"无效)
'-' 可以用作一元运算(即 "-1"和 "-(2 + 3)"是有效的)
输入中不存在两个连续的操作符
每个数字和运行的计算将适合于一个有符号的 32位 整数
代码:
public int calculate(String s) {
int a =0;
s=s.replace(" ","");//去除空格的一个方法
List<String> a1 =new ArrayList<>();
//把整体分为小部分存入集合
String a2 ="";
for (int i = 0; i <s.length() ; i++) {
switch (s.charAt(i)){
case '1':
a2+="1";
if (i==s.length()-1)
a1.add(a2);
break;
case '2':
a2+="2";
if (i==s.length()-1)
a1.add(a2);
break;
case '3':
a2+="3";
if (i==s.length()-1)
a1.add(a2);
break;
case '4':
a2+="4";
if (i==s.length()-1)
a1.add(a2);
break;
case '5':
a2+="5";
if (i==s.length()-1)
a1.add(a2);
break;
case '6':
a2+="6";
if (i==s.length()-1)
a1.add(a2);
break;
case '7':
a2+="7";
if (i==s.length()-1)
a1.add(a2);
break;
case '8':
a2+="8";
if (i==s.length()-1)
a1.add(a2);
break;
case '9':
a2+="9";
if (i==s.length()-1)
a1.add(a2);
break;
case '0':
a2+="0";
if (i==s.length()-1)
a1.add(a2);
break;
case '+':
if (s.charAt(i-1)==')'){
a1.add("+");
}else {
a1.add(a2);
a2="";
a1.add("+");
}
break;
case '-':
if (i==0||s.charAt(i-1)==')'||s.charAt(i-1)=='('){
a1.add("-");
}else {
a1.add(a2);
a2="";
a1.add("-");
}
break;
case '*':
if (s.charAt(i-1)==')'){
a1.add("*");
}else {
a1.add(a2);
a2="";
a1.add("*");
}
break;
case '/':
if (s.charAt(i-1)==')'){
a1.add("/");
}else {
a1.add(a2);
a2="";
a1.add("/");
}
break;
case '(':
a++;
a1.add("(");
break;
case ')':
if (s.charAt(i-1)==')'){
a1.add(")");
}else {
a1.add(a2);
a2="";
a1.add(")");}
break; }
}
//把括号里面的东西先计算出来
for (int i = 0; i <a ; i++) {
int b =0;//右括号下标
int b1=0;//左括号下标
//找第一个右括号
q:for (int j = 0; j <a1.size() ; j++) {
switch (a1.get(j)){
case ")":
b=j;
break q;
}
}
//找与之对应的左括号
o:for (int j = b-2; j >=0 ; j--) {//第一个右括号对应的左括号
switch (a1.get(j)){
case "(":
b1=j;
break o;
}
}
//把括号之间的字符串值赋给字符串数组a4
String[] a4=new String[b-b1];
for (int j = b1+1; j <b ; j++) {
a4[j-b1-1]=a1.get(j);
}
//集合中删除到只剩一个又括号
for (int j = b1; j <b ; j++) {
a1.remove(b1);
}
//
a1.set(b1,jisuan(a4));
}
switch (a1.size()){
case 2:
return 0-Integer.valueOf(a1.get(1));
}
String[] a5=new String[a1.size()];
for (int i = 0; i <a1.size() ; i++) {
a5[i]=a1.get(i);
}
return Integer.valueOf(jisuan(a5));
} public String jisuan(String[] a){
double s=0;
if (a.length==1){
return String.valueOf(a[0]);
}
for (int i = 0; i <a.length-1 ; i++) {
switch (a[i]){
case "+":
s+=Double.valueOf(a[i+1]);
i++;
break;
case "-":
s-=Double.valueOf(a[i+1]);
i++;
break;
case "*":
s*=Double.valueOf(a[i+1]);
i++;
break;
case "/":
s/=Double.valueOf(a[i+1]);
i++;
break;
default:
s+=Double.valueOf(a[i]);
}
}
return String.valueOf((int)s);
}
思路:
………………我有思路嘛,我感觉我就是一步一步强行拆分出来的,先判断有没有括号,有的话先把括号里面的算出来,然后代替了括号括号里面的这些个字符串(也包括,括号),最后得到一个没有括号的字符串,然后如果存在负数,然后用0去一个一个加就好了
java计算器༼༎ຶᴗ༎ຶ༽༼༎ຶᴗ༎ຶ༽༼༎ຶᴗ༎ຶ༽༼༎ຶᴗ༎ຶ༽,又是掉发的一天的更多相关文章
- java 计算器SWT/RAP(版本3)键盘鼠标兼容
java 计算器SWT/RAP(版本3)键盘鼠标兼容,之前版本也对,但存在线程失效问题,当多人访问时,就容易线程失效,一直犯得一个错误就是一直用static变量和static方法, 之前加了什么js界 ...
- 结对项目3-功能增强型带基本函数计算java计算器
-----------------------------------------------------实验报告------------------------------------------- ...
- java计算器项目
简单的java计算器项目 题目:java计算器项目 一. 题目简介: 一个能进行加减乘除四则运算的小程序 Github链接:https://github.com/lizhenbin/test/tr ...
- Java计算器的图形界面应用程序
JAVA计算器的图形界面应用程序 题目简介: 整体分析: 实验代码: /*部分使用插件做界面*/ import java.awt.EventQueue; import javax.swing.JB ...
- Java计算器的简易实现(+-*/)
java计算器的简易实现(+-*/) import java.util.Scanner; /* 写一个计算器 实现加减乘除四个功能 并且能够用循环接收新的数据,通过用户交互实现 写四个方法 + - * ...
- 一个六年Java程序员的从业总结:比起掉发,我更怕掉队
我一直担惊受怕,过去,可能是因为我年轻,但现在,我已经不是那么年轻了,我仍然发现有很多事情让我害怕. 当年纪越来越大后,我开始变得不能加班.我开始用更多的时间和家人在一起,而不是坐在计算机前(尽管这样 ...
- java 计算器
初识java:利用swing制作一个简单的计算器,仿造window10内置计算器标准模式下的界面. 涉及学习内容: 设置窗口 设计界面按键 设置文本框:只读 String字符串操作:与double类型 ...
- java设计之简单的JAVA计算器
做这个东西主要是为了练习一下以前学习过的java Swing,所以那些复杂的算法就没有加载到里面去........ 先展示一下效果....,额,当然不是这个样子.... ---> 代码: p ...
- java计算器
由于自己的实验报告 需要用Java来写一个实验报告.自己本没有怎么学过Java,但是学的话也就认真的学一下,毕竟技术这条路线是技多不压身.于是在网站上找来了一些资料,关于Java到底是干什么的, ...
随机推荐
- HDU4991 Ordered Subsequence (树状数组优化DP)
dp[i][j]表示以a[i]结尾的长度为j的上升子序列个数. 方程:dp[i][j]=sum(dp[k][j-1]),a[k]<a[i],1<=k<i. 求解目标:sum(dp[k ...
- ExcelHelper ->NPOI插件
调用: var ms = ExcelHelper.PrintInvoiceToExcel("观看时长", headline, items, (row, item) => { ...
- rowkey设计原则和方法
rowkey设计首先应当遵循三大原则: 1.rowkey长度原则 rowkey是一个二进制码流,可以为任意字符串,最大长度为64kb,实际应用中一般为10-100bytes,它以byte[]形式保存, ...
- Vue学习之--------绑定样式、条件渲染、v-show和v-if的区别(2022/7/12)
文章目录 1.绑定样式 1.1 基础知识 1.2 代码实例 1.3 测试效果 2.条件渲染 2.1 基本知识 2.2 代码实例 2.3 测试效果 1.绑定样式 没啥好说的.我觉得还没直接引入外部写好的 ...
- 一天十道Java面试题----第四天(线程池复用的原理------>spring事务的实现方式原理以及隔离级别)
这里是参考B站上的大佬做的面试题笔记.大家也可以去看视频讲解!!! 文章目录 31.线程池复用的原理 32.spring是什么? 33.对Aop的理解 34.对IOC的理解 35.BeanFactor ...
- 初始Vue、Vue模板语法、数据绑定(2022/7/3)
文章目录 1.Vue简介 1.1.Vue的安装使用 1.2.实际的运用案例 1.3.vue开发工具的使用(这个需要在浏览器中安装) 2.初始Vue 2.1 .基础知识 2.1 .代码实例 2.2 .页 ...
- 齐博x1模板中常用的TP标签数据处理
上图是比较常用的, 而下图是比较特殊的场合,比如幻灯片可能会用到 下图使用了TP的循环标签. 上图只使用了条件判断标签 上图不存在 val="xxx" 这个参数,所以会自动循环输出 ...
- Educational Codeforces Round 122 (Rated for Div. 2)/codeforces1633
CodeForces1633 Div. 7 解析: 题目大意 给定 \(t\) 组数据.每组数据给定一个数 \(n\)(\(10\le n\le 999\)). 每次操作可以修改 \(n\) 任意一位 ...
- 2.httprunner-yaml用例结构
前言: httprunner3.x版本弱化了api层的概念 直接在testcase中写request请求 如果是单个请求,也可以直接写成一个testcase 每个testcase必须具有两个类属性:c ...
- DQL-聚合函数
DQL-聚合函数 SQL基本函数,聚合函数对一组值执行计算,并返回单个值,也被称为组函数. 聚合函数对一组值执行计算并返回单一的值.除 COUNT 以外,聚合函数忽略空值,如果COUNT函数的应用对象 ...