四則演算練習

5357 ワード

テーマの要件

update 2018-04-12

  • 試験機能(Beta)
  • を追加
    4つの演算のルールと式を入力し、テストプログラムは式がルールに合っているかどうかを自動的に判断することができます.
    入出力の例:
    入力:
    {
      "config": {
        "numberOfExpression": 30,
        "range": 30,
        "hasFraction": false,
        "hasMultipleAndDivide": true,
        "hasParentheses": true
      },
      "expressions": {
        "3 × ( 3 + 3 )": "18",
        "( 3 + 3 )": "6"
      }
    }

    パラメータの説明を入力:configで:
  • numberOfExpression:式の個数
  • range:式中のオペランドの範囲
  • hasFraction:スコアを含むかどうか(true:はい、false:いいえ)
  • hasMultipleAndDivide:乗算除算を含むかどうか(true:はい、false:いいえ)
  • hasParentheses:かっこを含むかどうか(true:はい、false:いいえ)
  • expressionsで
  • key表現式
  • value式の値
  • を表す
    出力:
    {
      "config": {
        "numberOfExpression": 30,
        "range": 30,
        "hasFraction": false,
        "hasMultipleAndDivide": true,
        "hasParentheses": true,
        "hasNegative": false,
        "answer": false,
        "maxNumberOfOperation": 3
      },
      "results": [
        {
          "3 × ( 3 + 3 )": {
            "true": " "
          }
        },
        {
          "( 3 - 1 )": {
            "false": " "
          }
        }
      ],
      "enough": false
    }
    

    出力パラメータの説明:
  • config:入力したconfigと同じ
  • results:各式が正しいかどうかについて説明します.keyは式で、valueのkeyは正しいかどうか、valueの中で式がどの条件を満たしていないかを説明します.
  • enough:条件を満たすのに十分な式が生成されたか否かを示す
  • RESTfulインタフェースアドレス(試用版)、
  • インタフェースメソッドタイプ:POST
  • インタフェースパラメータ名:answer
  • パラメータ値:入力例
  • を参照

    update 2018-04-06

  • マルチ言語処理の追加
  • 英語
  • 簡体字中国語
  • 結果ページ最適化
  • 解答オプションを表示するかどうかを追加
  • update 2018-04-04

  • devブランチを追加し、通常開発に使用し、テストが安定した後、mergeはmasterブランチに、現在サーバー上で実行されているのはmasterブランチの内容
  • である.
  • devブランチ更新
  • Spring boot 2.0.0
  • に更新
  • ログ処理
  • を追加
  • 増加異常処理

  • 開発環境

  • JDK 1.8
  • Maven 3.5.0
  • IntelliJ IDEA

  • 説明


    じっこうアドレス
    インタフェースアドレス

    エクスプレッションインタフェースの作成方法

    String generate(String configs) 

    入力パラメータ、文字列タイプ、構成項目は構成パラメータを参照してください:
    {
      "numberOfExpression": "10",
      "range": "10",
      "hasFraction": "false",
      "hasMultipleAndDivide": "true",
      "hasParentheses": "false",
      "hasNegative": "true",
      "answer": "true"
    }

    戻り値:
    [8 - 5 ÷ 6 × 9 = 0.5, 7 + 8 = 15.0, 9 × 9 = 81.0, 7 × 6 + 4 ÷ 7 = 42.57142857142857, 5 ÷ 7 - 4 = -3.2857142857142856, 2 - 9 - 1 + 1 = -7.0, 3 ÷ 2 × 6 = 9.0, 1 × 0 = 0.0, 4 × 3 = 12.0, 3 - 7 - 5 = -9.0]

    インタフェースメソッド

    String answer(String expression) 

    入力:
    4 × ( 9'1/7 - 5 ) ÷ 3

    戻り値:
    4 × ( 9'1/7 - 5 ) ÷ 3 = 5.523809523809524

    デフォルトのコンフィギュレーション・アイテム・インタフェースの取得方法

    String retrieveDefaultTemplate() 

    デフォルトのJSON構成を返します.
    {
      "numberOfExpression": "10",
      "range": "10",
      "hasFraction": "false",
      "hasMultipleAndDivide": "true",
      "hasParentheses": "false",
      "hasNegative": "true",
      "answer": "true"
    }

    構成パラメータ

  • -nまたは-number:式を生成する個数
  • -rまたは-range:問題の数値(自然数、真分数、真分数分母)の範囲を制御します.このパラメータは1または他の自然数に設定できます.このパラメータは与えられなければならない.そうしないと、プログラムはエラーを報告し、ヘルプ情報
  • を与える.
  • -hf:有無点数
  • -md:乗算法があるかどうか
  • -hp:括弧があるかどうか
  • -hn:負の有無
  • -as:答えを生成するかどうか
  • 少なくとも1つの演算子、最大3つの演算子
  • 注意:解析コマンドラインパラメータはJCommanderで解析されます.

    式ロジックの生成


    最初の考えは、実は簡単で乱暴で、生成する演算式を文字列と見なして、この文字列の中で:
  • 演算子個数=演算数の個数-1=>演算数=演算子個数+1
  • (演算子個数+演算数個数)サイズの配列を開き、配列内の各要素を遍歴し、偶数位置挿入演算数、奇数位置挿入演算子を挿入します.
  • スコアがある場合は、まずランダムにスコアが挿入可能な位置を探し、他の演算数が挿入可能な位置にスコアまたは整数を挿入します.
  • は乗算と除算があるかどうかを判断し、ある場合は{"+","-","x","÷"}から挿入演算子の位置をランダムに探し、乗算と除算がなければ{"+","-"}から挿入演算子の位置をランダムに探します.
  • 演算子が除算され、直後の演算数が0の場合、0は0でない演算数に再置き換えられます.
  • 括弧がある場合は、0番目のオペランドからn-1番目のオペランドの中からランダムに1つのオペランドを選択する前に1つの"("がm番目のオペランドであると仮定し、m+1番目のオペランドからn番目のオペランドの中からランダムに1つのオペランドの後に")"
  • を選択する.

    デリバリーロジック

  • 文字列式(接尾辞式)を二叉木に変換し、この二叉木の左右のサブツリーをカスタムソートします.左右のサブツリーがどのように変換されても、最終的には順序付けされます.2つの式で生成された二叉木がソートされた後の文字列のシーケンスが一致すると、2つの式が重複していることを示します.

  • けいさんロジック

  • 接尾辞式を接尾辞式に変換し、その後、接尾辞式を
  • に計算する
  • 計算の過程で、1つのスタックを設置して、操作数はスタックを押して、オペレータに出会って、スタックの2つの操作数を出して計算結果を行ってスタックを押して、最後にスタックの残りの1つの要素は結果です.

  • コード#コード#


    参考文献

  • How to use Log4j 2 with Spring Boot
  • Guide to Spring Boot REST API Error Handling
  • Spring BootにおけるWebアプリケーションの統合異常処理
  • A Guide To Spring Redirects
  • Spring MVC and Thymeleaf: how to access data from templates
  • A quick guide to Internationalization in Spring Boot