//因爲很簡單,所以不採用MVC模式
//先寫個JavaBean包
package cn.itcast.bean;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Pattern;
public class CaculatorBean {
//定義第一個數字
private String firstNum;
//定義第二個數字
private String secNum;
//定義運算符
private char operator;
//定義報錯處理方法
private Map<String,String> errors = new HashMap<String,String>();
//實現所有的GETTER和SETTER
public Map<String, String> getErrors() {
return errors;
}
public void setErrors(Map<String, String> errors) {
this.errors = errors;
}
public String getFirstNum() {
return firstNum;
}
public void setFirstNum(String firstNum) {
this.firstNum = firstNum;
}
public String getSecNum() {
return secNum;
}
public void setSecNum(String secNum) {
this.secNum = secNum;
}
public char getOperator() {
return operator;
}
public void setOperator(char operator) {
this.operator = operator;
}
//實現運算的方法
public String caculate(){
/**
* Java在java.math包中提供的API類BigDecimal,用來對超過16位有效位的數進行精確的運算。
* 雙精度浮點型變量double可以處理16位有效數。在實際應用中,需要對更大或者更小的數進行運算和處理。
* float和double只能用來做科學計算或者是工程計算,在商業計算中要用java.math.BigDecimal。BigDecimal所創建的是對象,
* 我們不能使用傳統的+、-、*、/等算術運算符直接對其對象進行數學運算,而必須調用其相對應的方法。
* 方法中的參數也必須是BigDecimal的對象。構造器是類的特殊方法,專門用來創建對象,特別是帶有參數的對象。
*
*/
BigDecimal result = null;
BigDecimal first = new BigDecimal(firstNum);
BigDecimal second= new BigDecimal(secNum);
//判斷用戶點擊的運算符
switch(operator)
{
case '+':
result = first.add(second);break;
case '-':
result = first.subtract(second);break;
case '*':
result = first.multiply(second);break;
case '/':
if(secNum.equals("0")){
System.out.println("被除數不能爲0.。。");
}
result = first.divide(second);
break;
case '%':
result = first.remainder(second);break;
default:
break;
}
return result.toString();
}
//定義報錯的處理方法
public boolean vaildate(){
boolean flag = true;
//這是正則表達式,用於判斷用戶輸入的格式有沒有錯誤
Pattern p =Pattern.compile("\\d+");
if(firstNum==null||"".equals(firstNum)){
errors.put("firstNum","第一個運行數字不能爲空");
flag = false;
}else if(!p.matcher(firstNum).matches()){
errors.put("firstNum", "只能輸入數字");
flag = false;
}
if(secNum==null||"".equals(secNum)){
errors.put("secNum","第二個運行數字不能爲空");
flag = false;
}else if(!p.matcher(secNum).matches()){
errors.put("secNum", "只能輸入數字");
flag = false;
}
return flag;
}
}
//接下來是JSP頁面
用來顯示界面和傳入業務邏輯
當然,這是很LOW的方法,只適合簡單的實現
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'caculator.jsp' starting page</title>
</head>
<body>
<jsp:useBean id="caculator" class="cn.itcast.bean.CaculatorBean" />
<jsp:setProperty property="*" name="caculator"/>
<%
if(caculator.vaildate()){
%>
<font color="green">運算結果
<jsp:getProperty property="firstNum" name="caculator"/>
<jsp:getProperty property="operator" name="caculator"/>
<jsp:getProperty property="secNum" name="caculator"/>
=<%=caculator.caculate() %>
</font>
<%
}else{
Map<String,String>errors = caculator.getErrors();
pageContext.setAttribute("errors",errors);
}
%>
<form action="" method="post">
請輸入第一個運算數:<input type="text" name="firstNum"><font color="red">${errors.firstNum}</font><br/>
<select name="operator">
<option value="+">+</option>
<option value="-">-</option>
<option value="*">x</option>
<option value="/">÷</option>
</select><br/>
請輸入第二個運算數:<input type="text" name="secNum"><font color="red">${errors.secNum}</font><br/>
<input type="submit" value="提交"><br/>
</form>
</body>
</html>
寫的過程中遇到的問題:
1. JSP報找不到類方法的錯誤
2. JSP usebean報找不到類的錯誤
解決方法:
觀察了老半天以爲是JAR包衝突或者
方法邏輯不嚴
其實是沒先用IF判斷用戶輸入的數字是否合法
就先調用了JSP
第一次撰寫,多多指教,多多包含