📄 szys.java
字号:
import java.util.*;
import java.io.*;
import java.lang.Number.*;
import java.util.regex.* ;
public class testenum {
static boolean thefirstisOperations = false;
static String thealloper = "";
static LinkedList numberarry =new LinkedList();
static LinkedList Operators =new LinkedList();
public static void main(String[] args){
if(args.length<=0){
System.out.print("请输入算式!:");
BufferedReader sin = new BufferedReader(new InputStreamReader(System.in));
try{thealloper=sin.readLine().replaceAll(" ", "");}
catch(IOException e){
e.printStackTrace();
System.exit(-1);
}
}
else{
for(int i=0;i<args.length;i++){
thealloper += args[i];
}
}
thealloper.replaceAll(" ", "");
thealloper+='#';
Operators.add('#');
String a =new String();
while(thealloper.length()>0||!Operators.isEmpty()){
if((a=isornotanumber(thealloper))!=null){
//numberarry.add(a);
thealloper=a;
/*System.out.println("输入为数字");
System.out.println("操作符为:"+Operators);*/
}
else if((a=isornotaOperator(thealloper))!=null){
//Operators.add(a);
thealloper=a;
/*System.out.println("输入为操作符");
System.out.println("操作符为:"+Operators);*/
}
else if((a=isorneotaleftParenthesis(thealloper))!=null){
//Operators.add(a);
thealloper=a;
leftpar();
/*System.out.println("输入为左括号");
System.out.println("操作符为:"+Operators);*/
}
else if((a=isorneotarightParenthesis(thealloper))!=null){
//右括号的情况
thealloper=a;
rightpar();
/*System.out.println("输入为右括号");
System.out.println("操作符为:"+Operators);*/
}
else if((a=isorneottheend(thealloper))!=null){
/*System.out.println("输入结束");*/
theend();
}
else{
System.out.println("包括非法字符!");
System.exit(-1);
}
}
}
//判断是否是数字
public static String isornotanumber(String s1){
String s2=null;
float tempnumber ;
Pattern p = Pattern.compile("^\\d+\\.?\\d*");
Matcher m = p.matcher(s1);
if(m.find()){
s2=m.group();
s1=s1.substring(m.end());
//System.out.println(s1);
tempnumber=Float.parseFloat(s2);
numberarry.add(tempnumber);
return s1;
}
else return null;
}
public static String isornotaOperator(String s1){
String s2=null;
Pattern p = Pattern.compile("^[[\\+]|[\\-]|[\\*]|[/]]+");
Matcher m = p.matcher(s1);
if(m.find()){
s2=m.group();
if (s2.length()>1){
System.out.println("输入的运算符有错"+s2);
System.exit(-1);
return null;
}
else{
s1=s1.substring(m.end());
char s3=s2.charAt(0);
switch(s3){
case'+':{
add();
break;
}
case'-':{
sub();
break;
}
case'*':{
mul();
break;
}
case'/':{
div();
break;
}
}
//System.out.println(s1);
return s1;
}
}
else return null;
}
public static String isorneotaleftParenthesis(String s1){
String s2=null;
Pattern p = Pattern.compile("^[\\(]");
Matcher m = p.matcher(s1);
if(m.find()){
s2=m.group();
s1=s1.substring(m.end());
//System.out.println(s1);
return s1;
}
else return null;
}
public static String isorneotarightParenthesis(String s1){
String s2=null;
Pattern p = Pattern.compile("^[\\)]");
Matcher m = p.matcher(s1);
if(m.find()){
s2=m.group();
s1=s1.substring(m.end());
//System.out.println(s1);
return s1;
}
else return null;
}
public static String isorneottheend(String s1){
String s2=null;
Pattern p = Pattern.compile("^#+");
Matcher m = p.matcher(s1);
if(m.find()){
s2=m.group();
if (s2.length()>1){
System.out.println("输入的运算符有错"+s2);
System.exit(-1);
return null;
}
else return s2;
}
else return null;
}
//加运算
public static void add(){
char tempOperators=Operators.getLast().toString().charAt(0);
switch(tempOperators){
case'+':{
float a1 = Float.parseFloat(numberarry.getLast().toString());
numberarry.removeLast();
float a2 = Float.parseFloat(numberarry.getLast().toString());
numberarry.removeLast();
numberarry.addLast(a1+a2);
Operators.removeLast();
Operators.addLast('+');
break;
}
case'-':{
float a1 = Float.parseFloat(numberarry.getLast().toString());
numberarry.removeLast();
float a2 = Float.parseFloat(numberarry.getLast().toString());
numberarry.removeLast();
numberarry.addLast(a2-a1);
Operators.removeLast();
Operators.addLast('+');
break;
}
case'*':{
float a1 = Float.parseFloat(numberarry.getLast().toString());
numberarry.removeLast();
float a2 = Float.parseFloat(numberarry.getLast().toString());
numberarry.removeLast();
numberarry.addLast(a1*a2);
Operators.removeLast();
Operators.addLast('+');
break;
}
case'/':{
float a1 = Float.parseFloat(numberarry.getLast().toString());
numberarry.removeLast();
float a2 = Float.parseFloat(numberarry.getLast().toString());
if(a1==0){
System.out.println("不能被零除");
System.exit(-1);
}
numberarry.removeLast();
numberarry.addLast(a2/a1);
Operators.removeLast();
Operators.addLast('+');
break;
}
case'(':{
Operators.addLast('+');
break;
}
case'#':{
Operators.addLast('+');
break;
}
default:Operators.addLast('+');
}
}
//减运算
public static void sub(){
char tempOperators=Operators.getLast().toString().charAt(0);
switch(tempOperators){
case'+':{
float a1 = Float.parseFloat(numberarry.getLast().toString());
numberarry.removeLast();
float a2 = Float.parseFloat(numberarry.getLast().toString());
numberarry.removeLast();
numberarry.addLast(a1+a2);
Operators.removeLast();
Operators.addLast('-');
break;
}
case'-':{
float a1 = Float.parseFloat(numberarry.getLast().toString());
numberarry.removeLast();
float a2 = Float.parseFloat(numberarry.getLast().toString());
numberarry.removeLast();
numberarry.addLast(a2-a1);
Operators.removeLast();
Operators.addLast('-');
break;
}
case'*':{
float a1 = Float.parseFloat(numberarry.getLast().toString());
numberarry.removeLast();
float a2 = Float.parseFloat(numberarry.getLast().toString());
numberarry.removeLast();
numberarry.addLast(a2*a1);
Operators.removeLast();
Operators.addLast('-');
break;
}
case'/':{
float a1 = Float.parseFloat(numberarry.getLast().toString());
numberarry.removeLast();
float a2 = Float.parseFloat(numberarry.getLast().toString());
if(a1==0){
System.out.println("不能被零除");
System.exit(-1);
}
numberarry.removeLast();
numberarry.addLast(a2/a1);
Operators.removeLast();
Operators.addLast('-');
break;
}
case'(':{
Operators.addLast('-');
break;
}
case'#':{
Operators.addLast('-');
break;
}
default:Operators.addLast('-');
}
}
//乘运算
public static void mul(){
char tempOperators=Operators.getLast().toString().charAt(0);
switch(tempOperators){
case'+':{
Operators.addLast('*');
break;
}
case'-':{
Operators.addLast('*');
break;
}
case'*':{
float a1 = Float.parseFloat(numberarry.getLast().toString());
numberarry.removeLast();
float a2 = Float.parseFloat(numberarry.getLast().toString());
numberarry.removeLast();
numberarry.addLast(a2*a1);
Operators.removeLast();
Operators.addLast('*');
break;
}
case'/':{
float a1 = Float.parseFloat(numberarry.getLast().toString());
numberarry.removeLast();
float a2 = Float.parseFloat(numberarry.getLast().toString());
if(a1==0){
System.out.println("不能被零除");
System.exit(-1);
}
numberarry.removeLast();
numberarry.addLast(a2/a1);
Operators.removeLast();
Operators.addLast('*');
break;
}
case'(':{
Operators.addLast('*');
break;
}
case'#':{
Operators.addLast('*');
break;
}
default:Operators.addLast('*');
}
}
//除法运算
public static void div(){
char tempOperators=Operators.getLast().toString().charAt(0);
switch(tempOperators){
case'+':{
Operators.addLast('/');
break;
}
case'-':{
Operators.addLast('/');
break;
}
case'*':{
float a1 = Float.parseFloat(numberarry.getLast().toString());
numberarry.removeLast();
float a2 = Float.parseFloat(numberarry.getLast().toString());
numberarry.removeLast();
numberarry.addLast(a1*a2);
Operators.removeLast();
Operators.addLast('/');
break;
}
case'/':{
float a1 = Float.parseFloat(numberarry.getLast().toString());
numberarry.removeLast();
float a2 = Float.parseFloat(numberarry.getLast().toString());
if(a1==0){
System.out.println("不能被零除");
System.exit(-1);
}
numberarry.removeLast();
numberarry.addLast(a2/a1);
Operators.removeLast();
Operators.addLast('/');
break;
}
case'(':{
Operators.addLast('/');
break;
}
case'#':{
Operators.addLast('/');
break;
}
default:Operators.addLast('/');
}
}
//左括号
public static void leftpar(){
Operators.addLast('(');
}
//右括号
public static void rightpar(){
char tempOperators=Operators.getLast().toString().charAt(0);
while(tempOperators!='('){
switch(tempOperators){
case'+':{
float a1 = Float.parseFloat(numberarry.getLast().toString());
numberarry.removeLast();
float a2 = Float.parseFloat(numberarry.getLast().toString());
numberarry.removeLast();
numberarry.addLast(a2+a1);
Operators.removeLast();
tempOperators=Operators.getLast().toString().charAt(0);
break;
}
case'-':{
float a1 = Float.parseFloat(numberarry.getLast().toString());
numberarry.removeLast();
float a2 = Float.parseFloat(numberarry.getLast().toString());
numberarry.removeLast();
numberarry.addLast(a2-a1);
Operators.removeLast();
tempOperators=Operators.getLast().toString().charAt(0);
break;
}
case'*':{
float a1 = Float.parseFloat(numberarry.getLast().toString());
numberarry.removeLast();
float a2 = Float.parseFloat(numberarry.getLast().toString());
numberarry.removeLast();
numberarry.addLast(a2*a1);
Operators.removeLast();
tempOperators=Operators.getLast().toString().charAt(0);
break;
}
case'/':{
float a1 = Float.parseFloat(numberarry.getLast().toString());
numberarry.removeLast();
float a2 = Float.parseFloat(numberarry.getLast().toString());
if(a1==0){
System.out.println("不能被零除");
System.exit(-1);
}
numberarry.removeLast();
numberarry.addLast(a2/a1);
Operators.removeLast();
tempOperators=Operators.getLast().toString().charAt(0);
break;
}
case'#':{
System.out.println("括号不匹配!");
System.exit(-1);
break;
}
}
Operators.removeLast();
}
}
//结束符
public static void theend(){
char tempOperators=Operators.getLast().toString().charAt(0);
while(tempOperators!='#'){
if(numberarry.size()==1){
System.out.print("输入有误!");
System.exit(-1);
}
switch(tempOperators){
case'+':{
float a1 = Float.parseFloat(numberarry.getLast().toString());
numberarry.removeLast();
float a2 = Float.parseFloat(numberarry.getLast().toString());
numberarry.removeLast();
numberarry.addLast(a1+a2);
Operators.removeLast();
tempOperators=Operators.getLast().toString().charAt(0);
break;
}
case'-':{
float a1 = Float.parseFloat(numberarry.getLast().toString());
numberarry.removeLast();
float a2 = Float.parseFloat(numberarry.getLast().toString());
numberarry.removeLast();
numberarry.addLast(a2-a1);
Operators.removeLast();
tempOperators=Operators.getLast().toString().charAt(0);
break;
}
case'*':{
float a1 = Float.parseFloat(numberarry.getLast().toString());
numberarry.removeLast();
float a2 = Float.parseFloat(numberarry.getLast().toString());
numberarry.removeLast();
numberarry.addLast(a2*a1);
Operators.removeLast();
tempOperators=Operators.getLast().toString().charAt(0);
break;
}
case'/':{
float a1 = Float.parseFloat(numberarry.getLast().toString());
numberarry.removeLast();
float a2 = Float.parseFloat(numberarry.getLast().toString());
if(a1==0){
System.out.println("不能被零除");
System.exit(-1);
}
numberarry.removeLast();
numberarry.addLast(a2/a1);
Operators.removeLast();
tempOperators=Operators.getLast().toString().charAt(0);
break;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -