From 5ff952dbedd2e5a4c503bf33c6eba101181d5e25 Mon Sep 17 00:00:00 2001 From: hnu202326010305 <1405671544@qq.com> Date: Sun, 28 Sep 2025 00:59:39 +0800 Subject: [PATCH] ADD file via upload --- src/TrigManager.java | 70 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 src/TrigManager.java diff --git a/src/TrigManager.java b/src/TrigManager.java new file mode 100644 index 0000000..f5fcc91 --- /dev/null +++ b/src/TrigManager.java @@ -0,0 +1,70 @@ +import java.util.List; +import java.util.Random; + +/** + * 负责添加三角函数 + */ +public class TrigManager { + private static final Random RANDOM = new Random(); + private static final String[] TRIG_FUNCTIONS = {"sin", "cos", "tan"}; + + //添加三角函数 + public String addTrigOperations(String expression, List numPositions) { + if (numPositions.isEmpty()) { + return expression; + } + + String[] tokens = expression.split(" "); + int targetIndex = chooseTargetIndex(numPositions, tokens); + if (targetIndex == -1) { + return expression; + } + + tokens[targetIndex] = applyTrig(tokens[targetIndex]); + return String.join(" ", tokens); + } + + //随机函数种类 + private int chooseTargetIndex(List numPositions, String[] tokens) { + for (int tries = 0; tries < 50; tries++) { + int idx = numPositions.get(RANDOM.nextInt(numPositions.size())); + if (canApplyTrig(tokens, idx)) { + return idx; + } + } + return -1; + } + + //检测三角函数是否合法 + private boolean canApplyTrig(String[] tokens, int index) { + if (!isNumber(tokens[index])) { + return false; + } + int value = Integer.parseInt(tokens[index]); + + // 防止 tan(90) + if (value == 90 && RANDOM.nextInt(3) == 2) { + return false; + } + // cos(90) 不加在除法右边 + if (index > 0 && tokens[index - 1].equals("/") && value == 90) { + return false; + } + return true; + } + + //添加操作 + private String applyTrig(String token) { + String func = TRIG_FUNCTIONS[RANDOM.nextInt(TRIG_FUNCTIONS.length)]; + return func + "(" + token + ")"; + } + + private boolean isNumber(String token) { + try { + Integer.parseInt(token); + return true; + } catch (NumberFormatException e) { + return false; + } + } +}