题目:

给你一个字符串表达式 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计算器༼༎ຶᴗ༎ຶ༽༼༎ຶᴗ༎ຶ༽༼༎ຶᴗ༎ຶ༽༼༎ຶᴗ༎ຶ༽,又是掉发的一天的更多相关文章

  1. java 计算器SWT/RAP(版本3)键盘鼠标兼容

    java 计算器SWT/RAP(版本3)键盘鼠标兼容,之前版本也对,但存在线程失效问题,当多人访问时,就容易线程失效,一直犯得一个错误就是一直用static变量和static方法, 之前加了什么js界 ...

  2. 结对项目3-功能增强型带基本函数计算java计算器

    -----------------------------------------------------实验报告------------------------------------------- ...

  3. java计算器项目

    简单的java计算器项目   题目:java计算器项目 一. 题目简介: 一个能进行加减乘除四则运算的小程序 Github链接:https://github.com/lizhenbin/test/tr ...

  4. Java计算器的图形界面应用程序

      JAVA计算器的图形界面应用程序 题目简介: 整体分析: 实验代码: /*部分使用插件做界面*/ import java.awt.EventQueue; import javax.swing.JB ...

  5. Java计算器的简易实现(+-*/)

    java计算器的简易实现(+-*/) import java.util.Scanner; /* 写一个计算器 实现加减乘除四个功能 并且能够用循环接收新的数据,通过用户交互实现 写四个方法 + - * ...

  6. 一个六年Java程序员的从业总结:比起掉发,我更怕掉队

    我一直担惊受怕,过去,可能是因为我年轻,但现在,我已经不是那么年轻了,我仍然发现有很多事情让我害怕. 当年纪越来越大后,我开始变得不能加班.我开始用更多的时间和家人在一起,而不是坐在计算机前(尽管这样 ...

  7. java 计算器

    初识java:利用swing制作一个简单的计算器,仿造window10内置计算器标准模式下的界面. 涉及学习内容: 设置窗口 设计界面按键 设置文本框:只读 String字符串操作:与double类型 ...

  8. java设计之简单的JAVA计算器

    做这个东西主要是为了练习一下以前学习过的java Swing,所以那些复杂的算法就没有加载到里面去........ 先展示一下效果....,额,当然不是这个样子....   ---> 代码: p ...

  9. java计算器

       由于自己的实验报告 需要用Java来写一个实验报告.自己本没有怎么学过Java,但是学的话也就认真的学一下,毕竟技术这条路线是技多不压身.于是在网站上找来了一些资料,关于Java到底是干什么的, ...

随机推荐

  1. 洛谷P2517 HAOI2010 订货 (费用流)

    标准的费用流问题,关键在于巧妙地建模 一共有n个月份,源点设为0,汇点设为n+1 1.源点向所有月份连边,容量为正无穷,费用为该月进货的费用 2.每个月向下一个月连边,容量为仓库容量,费用为存货费用 ...

  2. linux基础总结

    linux的特点 - 免费的/开源       - 支持多线程/多用户       - 安全性好       - 对内存和文件管理优越 关机命令      shutdown -h now(立即进行关机 ...

  3. API接口笔记

    1.基类   定义返回信息 protected $user; //用户表 protected $token; //用户token protected $isSuccess = FALSE; //状态是 ...

  4. 安装notepad++ 安装Python Python环境变量的数值。怎样在notepad++上运行Python的代码

    文章目录 1.下载安装一个Python的编辑器notepad++,(我这里有现成的,也可以去网上搜很多) 2.安装python,(我这里有现成的,也可以去网上下载). 3.怎样彻底删除Python,有 ...

  5. JUC(2)使用condition实现精准通知唤醒

    package com.orderPC; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks. ...

  6. python同时识别多张人脸(运用face_recognition)

    之前发的博客和网上流传的代码严格来说都只算得上是人脸检测,不能区别人脸,今天来说说真的人脸识别 篇幅所限,就举两张人脸的例子了,本程序需要安装face_recognition 下面是全部源代码: im ...

  7. 京东云开发者|京东云RDS数据迁移常见场景攻略

    云时代已经来临,云上很多场景下都需要数据的迁移.备份和流转,各大云厂商也大都提供了自己的迁移工具.本文主要介绍京东云数据库为解决用户数据迁移的常见场景所提供的解决方案. 场景一:数据迁移上云 数据迁移 ...

  8. javascript异步编程,promise概念

    javascript 异步编程 概述 采用单线程模式工作的原因: 避免多线dom操作同步问题,javascript的执行环境中负责执行代码的线程只有一个 内容概要 同步模式和异步模式 事件循环和消息队 ...

  9. FastApi学习

    vscode配置 插件 code runner在 setting.json中关于python的修改为,因为我使用了虚拟环境,得让vscode找到python的路径 "code-runner. ...

  10. 「浙江理工大学ACM入队200题系列」问题 K: 零基础学C/C++84——奇偶ASCII值判断

    本题是浙江理工大学ACM入队200题第八套中的K题 我们先来看一下这题的题面. 题面 题目描述 任意输入一个字符,判断其ASCII是否是奇数,若是,输出YES,否则,输出NO; 例如,字符A的ASCI ...