生活随笔
收集整理的這篇文章主要介紹了
20172307 结对编程项目-四则运算 第二周 阶段总结
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
20172307 結對編程項目-四則運算 第二周 階段總結
(結隊項目碼云地址)
相關過程截圖(關鍵代碼處加了注釋)
/*Transform.java 作者:趙曉海 黃宇瑭用于將一個中綴表達式轉換為對應的后綴表達式*/import java.util.Stack;public class Transform {String former;//中綴表達式String last;//后綴表達式//構造函數public Transform(String former){this.former=former;last="";}//得到后綴表達式的方法public String getLast() {return last;}//將中綴表達式轉為后綴表達式的方法public void transform(){// int length=(former.length()+1)/2;//StringTokenizer toArraylist=new StringTokenizer(former);String []str1=former.split("\\s");/*int num1=0;while (toArraylist.hasMoreTokens()){str1[num1]=toArraylist.nextToken();num1++;}*/String [] str2=new String[str1.length-1];for (int a=0;a<str1.length-1;a++)str2[a]=str1[a];Stack stack=new Stack();int num2=0;while (num2<str2.length){if(str2[num2].equalsIgnoreCase("+")==false&&str2[num2].equalsIgnoreCase("-")==false&&str2[num2].equalsIgnoreCase("×")==false&&str2[num2].equalsIgnoreCase("÷")==false)last+=str2[num2]+" ";elseif (stack.empty()==true)stack.push(str2[num2]);elseif ((stack.peek().equals("+")==true||stack.peek().equals("-")==true)&&(str2[num2].equalsIgnoreCase("×")||str2[num2].equalsIgnoreCase("÷")))stack.push(str2[num2]);else {last+=stack.peek()+" ";stack.pop();stack.push(str2[num2]);}num2++;}while (stack.empty()==false){last+= stack.peek()+" ";stack.pop();}}}
/*TransformTest.java 作者:趙曉海 黃宇瑭Transform類的驅動類*/public class TransformTest {public static void main(String[] args) {Transform a =new Transform("22 + 10/3 ÷ 1/10 =");a.transform();//使用將中綴表達式轉為后綴表達式的方法System.out.println(a.getLast());}}
/*Calculate.java 作者:趙曉海 黃宇瑭用于計算一個后綴表達式*/import eg.RationalNumber;import java.util.Stack;public class Calculate {String [] str1;String result;//計算結果//構造函數public Calculate (String calculate){str1=calculate.split("\\s");}//將字符串形式的整數或者分數轉換為RationalNumber類的對象的方法public RationalNumber toRationalNumber(String num){if (num.contains("/")==false){int a =Integer.parseInt(num);RationalNumber rationalNumber1 =new RationalNumber(a,1);return rationalNumber1;}else {/* StringTokenizer st = new StringTokenizer(num,"/");int numerator =Integer.parseInt(st.nextToken("/"));int denominator=Integer.parseInt(st.nextToken("/"));*/String[] Array =num.split("/");int numerator = Integer.parseInt(Array[0]);int denominator=Integer.parseInt(Array[1]);RationalNumber rationalNumber2 =new RationalNumber(numerator,denominator);return rationalNumber2;}}//計算中綴表達式,并將結果保存在result中的方法public void ToResult(){Stack stack1=new Stack();int start =0;while (start<str1.length){if (str1[start].equalsIgnoreCase("+")==false&&str1[start].equalsIgnoreCase("-")==false&&str1[start].equalsIgnoreCase("×")==false&&str1[start].equalsIgnoreCase("÷")==false){stack1.push(str1[start]);}elseif (str1[start].equalsIgnoreCase("+")==true){RationalNumber num1=this.toRationalNumber(String.valueOf(stack1.peek()));stack1.pop();RationalNumber num2=this.toRationalNumber(String.valueOf(stack1.peek()));stack1.pop();RationalNumber finish =num2.add(num1);String str3=finish.toString();stack1.push(str3);}elseif (str1[start].equalsIgnoreCase("-")==true){RationalNumber num1=this.toRationalNumber(stack1.peek().toString());stack1.pop();RationalNumber num2=this.toRationalNumber(stack1.peek().toString());stack1.pop();RationalNumber finish =num2.subtract(num1);String str3=finish.toString();stack1.push(str3);}elseif (str1[start].equalsIgnoreCase("×")==true){RationalNumber num1=this.toRationalNumber(stack1.peek().toString());stack1.pop();RationalNumber num2=this.toRationalNumber(stack1.peek().toString());stack1.pop();RationalNumber finish =num2.multiply(num1);String str3=finish.toString();stack1.push(str3);}else{RationalNumber num1=this.toRationalNumber(String.valueOf(stack1.peek()));stack1.pop();RationalNumber num2=this.toRationalNumber(String.valueOf(stack1.peek()));stack1.pop();RationalNumber finish =num2.divide(num1);String str3=finish.toString();stack1.push(str3);}start++;}String str4=stack1.peek().toString();result=str4;}//得到計算結果的方法public String getResult() {return result;}}
遇到的困難及解決方法
- 問題一:在對字符串進行比較時用了“=”,導致測試時沒有產生預期的效果
- 問題一解決方式:只要用equals,進行比較就行。
- 問題二:在運行計算后綴表達式的驅動類時出現了越界錯誤。
- 運行錯誤截圖:
- 問題二解決方式:解決這問題的是趙曉海同學,我沒有起到什么作用。(在這里引用趙曉海博客的解決過程。)
通過單步調試,String型整數的長度不應定是1,要是整數,字符串中沒有字符“/”即可,于是通過查API找到String類中的Contains方法適用. - 調試成功截圖
- 代碼錯誤之處
- 代碼改正之處
項目劃分及貢獻值分配
結隊伙伴評價
趙曉海同學在這次項目的編寫中付出的努力比我要多很多很多,而且還會幫我解釋我不懂的地方,真的感謝他對我的幫助。
(結隊伙伴博客)
結隊照片
轉載于:https://www.cnblogs.com/20172307hyt/p/9008881.html
總結
以上是生活随笔為你收集整理的20172307 结对编程项目-四则运算 第二周 阶段总结的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。