⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 szys.java

📁 初学JAVA时写的一个
💻 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 + -