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到底是干什么的, ...
随机推荐
- 使用docker-compose安装Prometheus
Prometheus监控 一. 总览 主要组件: Prometheus server: 用于收集和存储时间序列数据 exporter: 客户端生成监控指标 Alertmanager: 处理警报 Gra ...
- 【YOLOv5】LabVIEW+YOLOv5快速实现实时物体识别(Object Detection)含源码
前言 前面我们给大家介绍了基于LabVIEW+YOLOv3/YOLOv4的物体识别(对象检测),今天接着上次的内容再来看看YOLOv5.本次主要是和大家分享使用LabVIEW快速实现yolov5的物体 ...
- python 网络爬虫全流程教学,从入门到实战(requests+bs4+存储文件)
python 网络爬虫全流程教学,从入门到实战(requests+bs4+存储文件) requests是一个Python第三方库,用于向URL地址发起请求 bs4 全名 BeautifulSoup4, ...
- jsp和java的结合使用显示学生信息
package com.zyz; public class Student { private String ID; // 学号 private String name; // 姓名 private ...
- Nginx配置-1
1.绑定nginx到指定cpu [root@nginx conf.d]# vim /apps/nginx/conf/nginx.conf worker_processes 2; worker_cpu_ ...
- Pictionary 方法记录
[COCI2017-2018#5] Pictionary 题面翻译 题目描述 在宇宙一个不为人知的地方,有一个星球,上面有一个国家,只有数学家居住. 在这个国家有\(n\)个数学家,有趣的是,每个数学 ...
- 二、.Net Core搭建Ocelot
上一篇文章介绍了Ocelot的基本概念:https://www.cnblogs.com/yangleiyu/p/15043762.html 本文介绍在.net core中如何使用ocelot. Oce ...
- Linux--多线程(三)
生产者消费者模型 概念: 生产者消费者模式就是通过一个容器来解决生产者和消费者的强耦合问题.生产者和消费者彼此之间不直接通讯,而通过一个来进行通讯,所以生产者生产完数据之后不用等待消费者处理,直接扔给 ...
- letcode-学习-数组去重
数组去重 问题描述: 给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度.元素的 相对顺序 应该保持 一致 . 由于在某些语言中不 ...
- OpenFOAM 编程 | 求解捕食者与被捕食者模型(predator-prey model)问题(ODEs)
0. 写在前面 本文问题参考自文献 \(^{[1]}\) 第一章例 6,并假设了一些条件,基于 OpenFOAM-v2206 编写程序数值上求解该问题.笔者之前也写过基于 OpenFOAM 求解偏分方 ...