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到底是干什么的, ...
随机推荐
- Java后端开发——美团(牛客)
Java后端开发--美团(牛客) Java的基本数据类型,各自的字节数 老生常谈,不多说了. 类型 字节数 byte 1字节 short 2字节 int 4字节 long 8字节 float 4字 ...
- TTD 专题 (第一篇):C# 那些短命线程都在干什么?
一:背景 1.讲故事 在分析的众多dump中,经常会遇到各种奇葩的问题,仅通过dump这种快照形式还是有很多问题搞不定,而通过 perfview 这种粒度又太粗,很难找到问题之所在,真的很头疼,比如本 ...
- C++和Java多维数组声明和初始化时的区别与常见问题
//C++只有在用{}进行初始化的时候才可以仅仅指定列数而不指定行数,因为可以通过直接//初始化时的元素个数自动计算出行数.而仅声明/创建数组而不初始化时,Cpp要求必须写明//行数和列数才能够创建数 ...
- Nebula Graph介绍和SpringBoot环境连接和查询
Nebula Graph介绍和SpringBoot环境连接和查询 转载请注明来源 https://www.cnblogs.com/milton/p/16784098.html 说明 当前Nebula ...
- Azure DevOps Pipelines部署.Net Core 应用到Kubernetes
一. 先决条件 1.Azure Repos Git/Git和项目上传 把本地的Net Core项目上传至Azure Repos Git/Git 2.Docker Registry Service ...
- 深入剖析Sgementation fault原理
深入剖析Sgementation fault原理 前言 我们在日常的编程当中,我们很容易遇到的一个程序崩溃的错误就是segmentation fault,在本篇文章当中将主要分析段错误发生的原因! S ...
- JVM中的方法区
JVM中的方法区 方法区存储什么? 用于存储已被虚拟机加载的类型信息.常量.静态变量.即时编译器编译后的代码缓存 1.类型信息 对每个加载的类型(类class.接口interface.枚举.注解)jv ...
- 成功解决:snippet设置的开机自启没有效果
1.问题描述 勾选开机启动后.没有效果.每次开机都要我重新找到对应的安装目录.双击运行开启 2.解决方法 将snipaste的快捷方式放到开机启动目录下 C:\Users\Administrator\ ...
- SpringBoot整合ES+Kibana
前言:最近在写一个HTTP代理服务器,记录日志使用的是ES,所以涉及到SpringBoot和ES的整合,整合完毕后又涉及到数据可视化分析,所以使用了Kibana进行管理,有些坑,需要记录一下 Spri ...
- MinGW配置C语言编译器gcc和g++
首先,在 https://sourceforge.net/projects/mingw/files/latest/download 下载安装MinGW,如下图所示: 点Installation-> ...