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到底是干什么的, ...
随机推荐
- 关于AWS-EC2或者多个资源的tag的批量添加-基于Resource Groups & Tag Editor 和 命令处理
今天收到一个请求,需要对公司所有的ec2-添加上两个成本IO标签,因为机器太多了 想到了如下两种方案去批量处理 方案一:利用aws的 [Management Tools]下的 Resource Gro ...
- PHP Phar反序列化学习
PHP Phar反序列化学习 Phar Phar是PHP的压缩文档,是PHP中类似于JAR的一种打包文件.它可以把多个文件存放至同一个文件中,无需解压,PHP就可以进行访问并执行内部语句. 默认开启版 ...
- docker gitlab迁移 备份 部署 搭建以及各种问题
当前环境 服务器A 服务器B ubuntu docker gitlab(版本一致) docker安装gitlab 由于考虑到gitlab 包含了⾃身的nginx.数据库.端⼝占⽤等等因数,这⾥使⽤的是 ...
- 使用MVC的实现登录注册功能
文章目录 1.视图层(View)页面的编写: 1.1.登录页面 1.2.注册页面 2.控制层(Controller)的编写 2.1. 注册 2.2 .登录 2.3 .实体类 3.Model层(Mode ...
- 如何在IDEA中创建Module、以及怎样在IDEA中删除Module?
文章目录 1.为何要使用Module? 2.Module的创建 3.如何从硬盘上删除module 1.为何要使用Module? 目前主流的大型项目都是分布式部署的,结构类型这种多Module结构.不同 ...
- 齐博x1如何取消禁止跨城市密码登录限制
为安全起意见,只要用户绑定了手机,或者QQ登录,或者微信登录其中的一项,只要用户的IP所在城市变了,就会禁止密码登录.如下图所示 而必须选择绑定过的手机或QQ或微信其中一种方式登录.以避免密码被盗所带 ...
- IDEA中Java项目创建lib目录并生成依赖
首先介绍说明一下idea在创建普通的Java项目,是没有lib文件夹的,下面我来带大家来创建一下1.右键点击项目,创建一个普通的文件夹 2.取名为lib 3.把项目所需的jar包复制到lib文件夹下 ...
- VUE2 学习(推荐直接学习VUE3)
概念区分: 前端框架:Vue.AngularJS.React 界面模板:Bootstrap.easyUI.adminlte 学习地址: b站:https://space.bilibili.com/39 ...
- 【Java并发007】原理层面:ReentrantLock中lock()、unlock()全解析
一.前言 Java线程同步两种方式,synchronized关键字和Lock锁机制,其中,AQS队列就是Lock锁实现公平加锁的底层支持. 二.AQS源码对于lock.lock()的实现 2.1 AQ ...
- AArch32/AArch64应用程序级内存模型(五)
本文主要为了记录在学习armv8的过程中的一些感悟.由于原文部分章节晦涩难懂,作者参考了网上很多优秀博主的部分章节(可能是直接摘录)并结合自己的理解重新整理了当前这个版本.文中不免有部分章节讲解很浅, ...