加減乘除四則運算

来源:https://www.cnblogs.com/qyj814/archive/2019/03/21/10575432.html
-Advertisement-
Play Games

個人項目實戰-四則混合運算 coding.net源碼地址 :https://git.dev.tencent.com/qyj814/fours.git 一.實驗要求 基本任務: 使用JAVA編程語言,獨立完成一個3到5個運算符的四則運算練習的軟體。 軟體基本功能要求如下: 程式可接收一個輸入參數n,然 ...


個人項目實戰-四則混合運算

 

 

coding.net地址 :https://git.dev.tencent.com/qyj814/fours.git                                                                                                               

 

一.實驗要求

基本任務

    使用JAVA編程語言,獨立完成一個3到5個運算符的四則運算練習的軟體。

軟體基本功能要求如下:

  • 程式可接收一個輸入參數n,然後隨機產生n道加減乘除(分別使用符號+-*÷來表示)練習題,每個數字在 0 和 100 之間,運算符在3個到5個之間。
  • 每個練習題至少要包含2種運算符。同時,由於小學生沒有分數與負數的概念,你所出的練習題在運算過程中不得出現負數與非整數,比如不能出      3÷5+2=2.6,2-5+10=7等算式。
  • 練習題生成好後,將你的學號與生成的n道練習題及其對應的正確答案輸出到文件“result.txt”中,不要輸出額外信息,文件目錄與程式目錄一致。
  • 當程式接收的參數為4時,以下為一個輸出文件示例。

2018010203

13+17-1=29

11*15-5=160

3+10+4-16=1

15÷5+3-2=4

軟體附加功能要求如下:(請有餘力的同學完成)

  • 支持有括弧的運算式,包括出題與求解正確答案。註意,算式中存在的括弧數必須大於2對,且不得超過運算符的個數。
  • 擴展程式功能支持真分數的出題與運算(只需要涵蓋加減法即可),例如:1/6      + 1/8 + 2/3= 23/24。註意在實現本功能時,需支持運算時分數的自動化簡,比如      1/2+1/6=2/3,而非4/6,且計算過程中與結果都須為真分數

 

二.操作步驟

      首先,分析題意,做基本的需求分析,總體設計等;其次,根據詳細設計編寫代碼併進行測試;最後,上傳文件到coding.net上。

 

三.代碼分析

      主要文件

1.創建整數核心代碼

public String[] createProblem(){
        Random random = new Random();
        int operatorCount =3 + random.nextInt(3); //隨機操作符的個數(3-5個)
        int operand[] = new int[operatorCount + 1]; //操作數個數
        int[] operatorIndex = index(operatorCount, 4, random);

        for(int i = 0; i < operatorCount + 1; i++){
            operand[i] = random.nextInt(101);//隨機生成(0-100)之間的數
        }

        String formula = stitchingFormula(operatorCount, operand, operatorIndex);

        //計算結果
        Calculator calculator = new Calculator();
        int res = calculator.algorithm(formula);
        String formulaRes[] = new String[2];

        if (res > 0){
            formulaRes[0] = formula;
            formulaRes[1] = String.valueOf(res);
        }else {
            return createProblem();
        }
        return formulaRes;
    }
View Code

2.創建分數核心代碼

public String[] createProblem(){
        Random random = new Random();
        int operatorCount = 1 + random.nextInt(3); //操作符的個數(1-3)個

        CreateInteger create = new CreateInteger();
        int[] operatorIndex = create.index(operatorCount,2, random); //操作符的下標

        //生成第一個操作數
        int[] coprimeNumber1 = createCoprimeNumbers(random);
        int x = coprimeNumber1[0];
        int y = coprimeNumber1[1];

        String s = x + "/" + y;

        for(int i=0; i < operatorCount; i++){
            //生成剩下的操作數
            int[] coprimeNumber = createCoprimeNumbers(random);
            int numx = coprimeNumber[0];
            int numy = coprimeNumber[1];

            String currentOpreator = OPERATOR[operatorIndex[i]];
            if(currentOpreator.equals("+")){  
                //加法
                   int count = 0;
                   if(x * numy + y * numx > y * numy) {
                          numx = y - x - 1;
                          numy = y;
                          if(numx <= 0)
                              numx = 1;
                              numy = 2 * y;
                       } 
                   
                   x = x * numy + y * numx;
                   y = y * numy;
                   
                   int greatFactor = greatFactor(numx,numy);
                   numx /= greatFactor; //最終結果化簡
                   numy /= greatFactor;
             }
             else {   
                 //減法
                  if(x * numy - y * numx < 0){ 
                          numx = x -1;
                          numy = y;
                          if(numx <= 0)
                              numx = 1;
                              numy = 2*y;
                       } 
 
                   x = x * numy - y * numx;
                   y = y * numy;
                   
                   int greatFactor = greatFactor(numx,numy);
                   numx /= greatFactor; //最終結果化簡
                   numy /= greatFactor;
              }
               String num = numx + "/" + numy;
               s += currentOpreator + num;
         }
        
         int greatFactor = greatFactor(x,y);
         x /= greatFactor; //最終結果化簡
         y /= greatFactor;

         String res = shamToProperFraction(x, y);
         s += "=";

         String formulaRes[] = {s, res};
         return formulaRes;
     }
View Code

3.計算核心代碼

private int calculate(int a, int b, String stmp) { //計算a stmp b的值
        int res = 0; //存結果
        char s = stmp.charAt(0);
        switch (s) {
            case '+': {
                res = a + b;
                break;
            }
            case '-': {
                res = a - b; //產生負數就不合格

                break;
            }
            case '*': {
                res = a * b;
                break;
            }
            case '÷': {
                if(b==0)
                    return -1;
                else if(a%b!=0) //產生小數就不合格
                    return -2;
                else
                    res = a / b;
                break;
            }
        }
        return res;
    }
View Code

4.生成問題並輸出到文件核心代碼

public void generateProblem(int num) throws IOException {
        //項目根目錄生成文件
          File file = new File("./result.txt");
          
          if(file.exists()) {
              file.delete();
              file.createNewFile();
          }
            
          FileOutputStream fileOutput = new FileOutputStream(file);
          PrintStream filePrintStream = new PrintStream(fileOutput);
          
            Random random = new Random();
          
            CreateFraction createFraction = new CreateFraction();
            CreateInteger createInteger = new CreateInteger();

            String[] problem = new String[2];
            filePrintStream.println("2017012454");
            for(int i = 1; i <= num; i++){
                int choose = random.nextInt(2);
                //選擇生成分數還是整數
                if (choose == 0){
                    problem = createInteger.createProblem();
                }else {
                    problem = createFraction.createProblem();
//                      problem = createInteger.createProblem();
                } 
                outputFile(problem, filePrintStream);
//                System.out.println(i);
            }
           
            fileOutput.close();
            filePrintStream.close();
            System.out.println("文件創建成功 ");
        }
View Code


四.PSP分析

PSP2.1 任務內容 計劃共完成需要的時間(h) 實際完成需要的時間(h)
Planning 計劃 3 5
Estimate  估計這個任務需要多少時間,並規劃大致工作步驟  0  0
Development 開發 60 83
Analysis 需求分析 (包括學習新技術)  0  0
Design Spec 生成設計文檔  0  0
Design Review 設計覆審 (和同事審核設計文檔)  0  0
Coding Standard 代碼規範 (為目前的開發制定合適的規範)  0  0
Design 具體設計  0  0
Coding 具體編碼  0  0
Code Review 代碼覆審  0  0
Test 測試(自我測試,修改代碼,提交修改)  0  0
Reporting 報告 5 7
Test Report 測試報告  0  0
Size Measurement 計算工作量  0  0
Postmortem & Process Improvement Plan 事後總結, 並提出過程改進計劃  0  0

 

 

五.心得體會

        這個項目我用了兩個周末四天,外加兩周內零零散散的時間,一共用了八十多個小時,即使這樣,我的代碼還是有很多不足,比如說:生成整數問題時例子太少(由於本人實在寫不下去了,都快寫吐了)。要說我這兩周寫代碼以來最大的體會,就是感覺自己知識學的還是不到位,遇到不懂的問題就得上網去查,一查又浪費了很多時間;寫出來的代碼也不是準確的,debug又花好多時間;總而言之,做完這個項目讓我覺得我要好好學習了。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • —本博客為原創內容,轉載需註明本人— 前幾天有個師妹將要畢業,需要準備畢業論文,但是論文調研需要數據資料,上知網一查,十幾萬條數據!指導老師讓她手動copy收集,十幾萬的數據手動copy要浪費多少時間啊,然後她就找我幫忙。我想了一下,寫個爬蟲程式去爬下來或許是個不錯的解決方案呢!之前一直聽其他人說爬 ...
  • 最近做了一個搜索介面的優化,反覆壓測了四次,終於達到要求了,記錄一下,晚上加個雞腿🍗 業務邏輯 從OpenSearch中檢索出數據,然後各種填充組裝數據,最後返回 邏輯看似很簡單,當初我也是這樣認為的,於是預估5天完成,最後前前後後開發、聯調、改bug直到上線差不多花了10天(當然這10天並不是只 ...
  • 爬蟲原理 瀏覽器獲取網頁內容的步驟:瀏覽器提交請求、下載網頁代碼、解析成頁面,爬蟲要做的就是: 簡單例子:利用Urllib庫爬取w3c網站教程 1、urllib的request模塊可以非常方便地抓取URL內容,也就是發送一個GET請求到指定的頁面,然後返回HTTP的響應:例如,對百度的一個w3c發送 ...
  • 上篇講解的JSONP的跨域請求方式,但是在瀏覽器的支持及請求方式上有局限性,接下來將介紹一種新的跨域請求方式CORS。 CORS是一個W3C標準,全稱是"跨域資源共用"(Cross-origin resource sharing)。 它允許瀏覽器向跨源伺服器,發出XMLHttpRequest請求,從 ...
  • ### 面試記【掌握】- 簡單性- 解析性- 面向對象 *- 高性能 *- 分散式處理- 多線程- 健壯性- 動態性- 安全性 *- 跨平臺 *- 移植性#### java為什麼能跨平臺 因為安裝了一個java虛擬機我們寫的java程式是在java虛擬機的基礎上運行的 jdk與jRE與jvm的關係 ...
  • 今天就把剩餘板塊給一一填充,意在做成一個系列,讓大家看了這個系列後,明白自己選擇了IT這條路後,應該乾什麼,怎麼乾。 相信大家看完以上兩篇文章後多少都會有個問號,除了我推薦的「笨辦法」外,就沒什麼資料的,而很多新手村玩家都喜歡問一個問題:有什麼資料可以參考的嗎?有什麼實戰項目可以借鑒的嗎? 今天... ...
  • %原圖像顯示picture_read = imread('1.jpg');subplot(2,4,1);figure0 = imshow(picture_read);title('原圖') %圖像灰度化picture_gray = rgb2gray(picture_read);subplot(2,4 ...
  • 一、前言 剛換工作,為了更快的學習框架和瞭解業務,基本每天都會加班,導致隔了幾天沒有進行總結,心裡總覺得不安,工作年限越長越感到學習的重要性,堅持下去!!! 經過前兩篇的總結,已經基本掌握了mybatis的開發模式,這篇主要是總結SqlMapConfig.xml文件的配置 SqlMapConfig. ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...