使用Java中的Random和运算符创建方程式

时间:2016-02-24 23:00:07

标签: java methods equation

我正在尝试创建一个方法,为我创建一个方程式,作为String。

例如,此方法将创建:

String formula =“5 + 3”;

然后另一种方法将解决它。

我真的不知道如何创建字符串。我应该使用concat吗?

感谢所有帮助。

public static String getEquation() {


    for(int i=0;i<7;i++){

    int rand = rng.nextInt(5);

    switch (rand) {

        case 0:
            operator = "+";
            break;
        case 1:
            operator = "-";
            break;
        case 2:
            operator = "*";
            break;
        case 3:
            operator = "/";
            break;
        case 4:
            operator = "(";
            break;
        case 5:
            operator = ")";
    }


}
     return formula;
}

1 个答案:

答案 0 :(得分:0)

快速写出来的东西,我认为这应该让你去。你必须处理括号的情况。我没有说明这一点。

import java.util.Random;

public class Test {

    static Random randomGenerator = new Random();
    static String operators = "+-*/P"; //p = parentheses pair

    public static char getRandomOperator() {
        return operators.charAt(randomGenerator.nextInt(operators.length()));
    }

    public static int getRandomNumber() {
        return randomGenerator.nextInt(100);
    }

    public static String createEquation() {
        //Just for proof of concept, let's do 3 operators
        String equation = "";
        int numOfOperators = 3;
        char operator = ' ';
        for (int i = 0; i < numOfOperators; i++) {
            equation += getRandomNumber();
            equation += getRandomOperator();
        }
        equation += getRandomNumber();
        return equation;
    }

    public static void main(String[] args) {
        String equation = createEquation();
        System.out.println(equation);
    }
}

我可能稍后有时间回来解决括号问题。现在我只打印“P”,其中应该处理括号。

修改 更新它以处理括号。我打算将它粘贴在这里,以防你想要保持旧的方式。还在这里和那里进行了一些调整。请注意,在括号中我没有处理匹配精确数量的运算符。这意味着如果所有开括号都没有在循环完成时关闭,则抓取操作符然后我在末尾添加额外的括号。这可能导致超过7个运营商。您应该添加逻辑,将一对括号视为1个运算符或将1个括号视为单个运算符。享受。

import java.util.Random;

public class Test {

    static Random randomGenerator = new Random();
    static String operators = "+-*/()";
    static int opeatorStringLength = operators.length();

    public static char getRandomOperator() {
        return operators.charAt(randomGenerator.nextInt(opeatorStringLength));
    }

    public static int getRandomNumber() {
        return randomGenerator.nextInt(100);
    }

    public static String appendToEquation(String equation, String value1, String value2) {
        String temp = equation;
        temp += value1;
        temp += value2;
        return temp;
    }

    public static String createEquation(int numOfOperators) {
        String equation = "";
        char operator;
        int operand;
        int openParenCounter = 0;
        for (int i = 0; i < numOfOperators; i++) {
            operator = getRandomOperator();
            operand = getRandomNumber();
            if (operator == '(') {
                openParenCounter++;
                equation = appendToEquation(equation, Character.toString(operator), Integer.toString(operand));
            } else if (operator == ')') {
                if (openParenCounter == 0) { //Can't start off with a close parenthesis
                    openParenCounter++;
                    equation = appendToEquation(equation, "(", Integer.toString(operand));
                } else {
                    openParenCounter--;
                    equation = appendToEquation(equation, Integer.toString(operand), Character.toString(operator));
                }
            } else {
                equation = appendToEquation(equation, Integer.toString(operand), Character.toString(operator));
            }
        }
        equation += getRandomNumber();
        while (openParenCounter > 0) {
            equation += ")";
            openParenCounter--;
        }

        return equation;
    }

    public static void main(String[] args) {
        String equation;
        equation = createEquation(7); //The argument passed is the number of operators to use
        System.out.println(equation);
    }
}