如何计算运算符为字符串的算术等式

时间:2018-03-14 20:57:33

标签: java android arrays math

我试图评估系统随机生成的方程式,其中两个整数存储在一个数组中,而运算符位于一个单独的字符串数组中。我想将答案与用户的答案进行比较。 这是我的代码:

Integer[] array;
String[] operators = {"+", "-", "*", "/"};
String question;
int operator = 0;

public void generateSum(){
    for (int x = 0; x < 2; x++) {
        Random randomNumber = new Random(); //creating random object
        int number = randomNumber.nextInt(100) + 1; 
        Random randomOperator = new Random();
        operator = randomOperator.nextInt(3);
        array[x] = (number);
    }
    question = array[0].toString() + operators[operator] + array[1].toString() + "=";
    TextView txt = findViewById(R.id.txtQuestion);
    txt.setText(question);
}

2 个答案:

答案 0 :(得分:0)

您可以调用此函数并将整数数组和运算符作为参数传递,然后您将获得操作的结果:

public int result(int[]array, int operator){
    switch(operator){
        case 0: // addition
            return array[0]+array[1];
            break;
        case 1: // subtraction
            return array[0]-array[1];
            break;
        case 2: // multiplication
            return array[0]*array[1];
            break;
        case 3: // division - result rounded up to integer
            return array[0]/array[1];
            break;
        default: // this shouldn't happen
            return 0;  
     }
}

然后您可以将用户给出的答案与计算结果进行比较。

顺便说一下,你的数组应该是int []而不是Integer []。 int是表示整数的基本类型,Integer是具有许多静态函数和一个int字段的类。如果您有兴趣,可以查看这篇关于int和Integer之间差异的文章:

  

What is the difference between Integer and int in Java?

答案 1 :(得分:0)

如果您的界面看起来像这样:

INNER JOIN

所以不是String []操作符,而是你有Operator []操作符。

你的循环将独立于你的实现,你只需要:

var ans2 = from ta in tableA
           join tb in tableB on ta.ShipId equals tb.ShipId
           join tc in tableC on tb.PostageId equals tc.PostageId
           where tc.PostageCode == "Package" && ta.MailId == "Specification"
           select new { ta, tb, tc };

现在,你如何实现操作方法取决于你,它可能是4个不同的类实现Operator,或者它可能是实现Operator的枚举,或者它可能是一个单独的类,如果用#构造它会有不同的行为34 +#34;或者&#34; - &#34;传入。

好的部分是你可以改变&#34; Operaton&#34;实现与其余逻辑完全分开。理解这两部分也会更容易。

例如,一个班级,&#34;加&#34;可以这样实现:

interface Operator {
    public String getView();
    public int operate(int v1, int v2);
}

实现像这样的4个类是蛋糕。你当然可以做更多的事情(比如Lambda,或者实现getView()的基类,所以你的子类只需要实现操作()...)

(注意,在我的第二个代码块中,从&#34开始;&#34; +是一个技巧#34;开始&#34;作为一个字符串,它消除了对.toString()的需要数组[0]并使线的长度不那么尴尬)