将方程式保存为double

时间:2016-10-14 14:40:57

标签: java android string math

我目前正在Android Studio中开展一个学校项目,到目前为止,每次按下屏幕上的按钮时,我都会编写一个生成随机方程式的代码,例如“3 + 9/3”。这个等式出现在textview中。现在我尝试用“abs”命令使用double来评估等式的结果。为此,我将方程存储在一个字符串中,然后尝试将其转换为double,因为“abs”命令不支持字符串。 这是代码:

String[] operationSet = new String[]{"+", "-", "/", "*"};

public void generate(View view) {
Random random = new Random();
int numOfOperations = random.nextInt(2) + 1;

List<String> operations = new ArrayList<>();

for (int i = 0; i < numOfOperations; i++) {
    String operation = operationSet[random.nextInt(4)];
    operations.add(operation);
}

int numOfNumbers = numOfOperations + 1;
List<Integer> numbers = new ArrayList<>();

for (int i = 0; i < numOfNumbers; i++) {
    int number = random.nextInt(10)+1;
    numbers.add(number);
}

String equation = "";
for (int i = 0; i < numOfOperations; i++) {
    equation += numbers.get(i);
    equation += operations.get(i);
}
equation += numbers.get(numbers.size() -1);

TextView TextEquation = (TextView)findViewById(R.id.textView);
TextEquation.setText(equation);

String stringResultOfEquation = String.valueOf(equation);

// Calculate the result of the equation

double doubleEquation = Double.parseDouble(equation);
double doubleResult = abs(doubleEquation);
String stringResult = String.valueOf(doubleResult);

TextView textResult = (TextView)findViewById(R.id.textView2);
textResult.setText(stringResult);

}

但是,当我在模拟器中运行应用程序时,我只是收到错误消息“NumberFormatException”。所以我想将我的字符串转换为double是有问题的。我的等式(例如:“5 * 3 + 6”)中的引号是否可能导致问题? 有没有不同的方法来存储我的方程式,所以我可以使用“abs”命令?

如果在我的问题中有任何不清楚的地方,请随意aks,我会尝试澄清问题:)

提前谢谢你!

PS。我不久前问了一个类似的问题,但它被错误地标记为副本。

1 个答案:

答案 0 :(得分:0)

我认为问题在于这一行

double doubleEquation = Double.parseDouble(equation);

您的“等式”是带有操作的String,因此您无法将String解析为double。您必须首先评估您的“等式”。 为此,您必须遍历String operation中的每个字符,当char例如为“+”时,您执行添加。 String不会仅仅评估数字本身。 像这样的东西

double i = Double.parseDouble("1");  

将评估为1.0

但这会导致错误

double i = Double.parseDouble("1+1");