当前位置 : 主页 > 编程语言 > java >

显示算式的竖式

来源:互联网 收集:自由互联 发布时间:2021-06-28
将一个加,减,乘,除的算式,打印成竖式的样子 public class VerticalForm {private final static String[] Operations = {"+","-","*","/"};public static void main(String[] args) {String ss = "2020 * 34234";VerticalForm.showE
将一个加,减,乘,除的算式,打印成竖式的样子
public class VerticalForm {

	private final static String[] Operations = {"+","-","*","/"};
	public static void main(String[] args) {
		String ss = "2020 * 34234";
		VerticalForm.showElement(ss);
		ss = "2020 + 34234";
		VerticalForm.showElement(ss);
		ss = "2020 - 34234";
		VerticalForm.showElement(ss);
		ss = "2020 / 5";
		VerticalForm.showElement(ss);
	}
	
	/**
	 * 显示算式
	 * @param equation
	 */
	public static void showElement(String equation) {
		String operation = getOperation(equation);
		
		if (isEmpty(operation)) {
			System.out.println("未找到运算符");
			return;
		}
		
		String[] nums = getNum(equation, operation);
		
		if (null == nums || isEmpty(nums[0]) || isEmpty(nums[1])) {
			System.out.println("数字未找到");
			return;
		}
		
		String result = getResult(nums[0], operation, nums[1]);
		int len = nums[0].length() + nums[1].length() + 1;
		
		System.out.println(addEmptyBefor(nums[0], len));
		System.out.println(addEmptyIn(operation , nums[1], len));
		System.out.println(showLine(len));
		System.out.println(addEmptyBefor(result, len));
	}
	
	/**
	 * 显示横线
	 * @param len
	 * @return
	 */
	private static String showLine(int len) {
		StringBuffer num = new StringBuffer();
		for(int i = 0;i < len; i++) {
			num.append("-");
		}
		
		return num.toString();
	}

	/**
	 * 添加中间的空格
	 * @param operation
	 * @param str
	 * @param len
	 * @return
	 */
	private static String addEmptyIn(String operation, String str, int len) {
		StringBuffer num = new StringBuffer();
		num.append(operation);
		for(int i = 0;i < (len - str.length() - operation.length()); i++) {
			num.append(" ");
		}
		
		return num.append(str).toString();
	}

	/**
	 * 添加前面的空格
	 * @param str
	 * @param len
	 * @return
	 */
	private static String addEmptyBefor(String str, int len) {
		StringBuffer num = new StringBuffer();
		
		for(int i = 0;i < (len - str.length()); i++) {
			num.append(" ");
		}
		
		return num.append(str).toString();
	}

	/**
	 * 计算结果
	 * @param first
	 * @param operation
	 * @param last
	 * @return
	 */
	private static String getResult(String first, String operation,String last) {
		float firstNum = Float.parseFloat(first);
		float lastNum = Float.parseFloat(last);
		
		float result = 0l;
		
		if(Operations[0].equals(operation)) {
			result = firstNum + lastNum;
		}else if(Operations[1].equals(operation)) {
			result = firstNum - lastNum;
		}else if(Operations[2].equals(operation)) {
			result = firstNum * lastNum;
		}else if(Operations[3].equals(operation)) {
			result = firstNum / lastNum;
		} else {
			return null;
		}
		
		return String.valueOf(result);
	}
	
	/**
	 * 获取算式里的数字
	 * @param equation
	 * @param operation
	 * @return
	 */
	private static String[] getNum(String equation, String operation) {
		String[] nums = new String[2];
		String firstNum = "";
		String lastNum = "";
		
		firstNum = equation.substring(0, equation.indexOf(operation)).trim();
		lastNum = equation.substring(equation.indexOf(operation) + 1, equation.length()).trim();
		
		try {
			float first = Float.parseFloat(firstNum);
			float last = Float.parseFloat(lastNum);
			nums[0] = firstNum;
			nums[1] = lastNum;
			return nums;
			
		} catch(Exception e){
			return null;
		}
	}
	
	/**
	 * 获取算式里的运算符
	 * @param equation
	 * @return
	 */
	private static String getOperation(String equation) {
		for(String op:Operations) {
			if(equation.indexOf(op) >= 0) {
				return op;
			}
		}
		return null;
	}
	
	/**
	 * 是否为空
	 * @param str
	 * @return
	 */
	private static boolean isEmpty(String str) {
		if(str == null || str.length() == 0) {
			return true;
		}
		return false;
	}
	
}
结果.png
网友评论