package mathlearning.service.QuestionGenerator; import java.util.Random; public abstract class QuestionGenerator{ protected Random random = new Random(); public abstract String generateQuestion() ; protected String type; public String getType() { return type; } QuestionGenerator() { type = "无"; } QuestionGenerator(String Type) { type = Type; } protected String preForOper(int[] operands) { StringBuilder question = new StringBuilder(); String[] operators = {"+", "-", "×", "÷"}; question.append(operands[0]); for (int i = 1; i < operands.length; i++) { String op = operators[ random.nextInt (operators.length)]; question.append(" ").append(op).append(" ").append(operands[i]); } return question.toString(); } protected boolean Check_num(String expression) { if(!(expression.equals("+") || expression.equals("-") || expression.equals("×") || expression.equals("÷"))) { return true; } else{ return false; } } protected String addParen(String expression) { String[] parts = expression.split(" "); StringBuilder result = new StringBuilder(); boolean r_paren_needed = false; for (int i = 0; i < parts.length; i++) { if(Check_num ( parts [i]) ) { if( !r_paren_needed ) { if(i <= parts.length -3 ) { if( random.nextBoolean() ) { result.append("(");r_paren_needed = true;} } result.append(parts[i]); } else { result.append( parts [i]); if( !random.nextBoolean()) { result.append(")");r_paren_needed = false; } } } else { result.append( parts [i] ); } if( i < parts.length -1 ) { result.append(" "); } } if( r_paren_needed ){ result.append(")");r_paren_needed = false; } return result.toString(); } protected String add_squs(String expression) { String[] parts = expression.split(" "); StringBuilder result = new StringBuilder(); boolean has_squs = false; for (int i = 0; i < parts.length; i++) { if( Check_num( parts [i] )) { double Thres = 0.3; if( !has_squs){ Thres = 0.7; } if ( random.nextDouble() < Thres ||(i == parts.length -1 && !has_squs)) { if ( random.nextBoolean() ) { result.append(parts[i]); result.append("²"); has_squs = true; } else { result.append("√"); result.append(parts[i]); has_squs = true; } } else { result.append(parts[i]); } } else { result.append(parts[i]); } if( i < parts.length -1 ) { result.append(" "); } } return result.toString(); } protected String add_sins(String expression) { String[] parts = expression.split(" "); StringBuilder result = new StringBuilder(); String[] functions = {"sin", "cos", "tan"}; boolean has_func = false; for (int i = 0; i < parts.length; i++) { double Thres = 0.4; if(!has_func){Thres = 0.8;} if(Check_num(parts[i])) { if ( random.nextDouble() < Thres ||(i == parts.length-1 && !has_func) ) { String func = functions[random.nextInt(functions.length)]; result.append(func).append("(").append(parts[i]).append(")"); } else { result.append(parts[i]); } } else { result.append(parts[i]); } if( i < parts.length-1 ) { result.append(" "); } } return result.toString(); } }