gpt4 book ai didi

java - 如何从左到右计算表达式

转载 作者:行者123 更新时间:2023-12-05 00:06:57 29 4
gpt4 key购买 nike

<分区>

我目前正在创建一个数学问答游戏,它会向用户输出随机算术问题。我有一个函数,它可以在其中创建问题并将它们存储在字符串数组中。这些问题可能因问题中出现的整数数量而异;例如一个问题可以是 3+4-9/3= 或 4*2/9= 但必须存在的最小整数数量是 2。例如3+4=等

我想做的是从左到右阅读问题来评估问题,忽略操作顺序。例如。 4+2*5= 应该等于 30 而不是 14。

我对这个问题的思考是这样的:

得到一个问题,遍历字符串并提取单个字符并将它们存储在数组列表中。将这些字符转换为 int 并首先评估 arraylist 中的前三个元素,将答案存储在临时 int 值中。获取接下来的 2 个元素并检查它是否不包含等号,如果不包含则使用这两个元素评估临时 int 值。在找不到等号时继续执行此操作。如果找到等号,则停止迭代并生成结果。

我的问题是我似乎无法将操作 +、-、*、/转换为 int 值。我想我可以,因为每个字符都可以转换成一个整数。

public void initAnswers(){
for(int i =0; i < questions.length; i++){
ArrayList<Integer> indivialIntegers = new ArrayList<>();
String questionToGetIndividual = questions[0];
//extracting individual chars
for(int j = 0; j < questionToGetIndividual.length(); j++){
indivialIntegers.add(Character.getNumericValue(questionToGetIndividual.charAt(j)));
}
}

EDIT = 这是我更新的代码。我收到数字格式异常错误。引起原因:java.lang.NumberFormatException:无效的 int

谁能看出原因?顺便说一句,我写了一个生成问题的方法(问题中的整数数量是随机生成的)。它们存储在一个数组中。我只是简单地遍历该数组中的每个问题并评估答案:我的起始函数是 initAnswers()。

public int computeAnswerThreeTerms(int numberOne, int numberTwo, String operation){
if(operation.equals("+")){
Log.d("onc","in addition");
return numberOne + numberTwo;
}else if(operation.equals("-")){
Log.d("onc","in subtraction");
return numberOne - numberTwo;
}else if(operation.equals("/")){
Log.d("onc","in division");
return numberOne / numberTwo;
}else if(operation.equals("*")){
Log.d("onc","in multiplication");
return numberOne * numberTwo;
}else{
return 0;
}
}

public int computeAnswer(int numberOne, String operation, int runningTotal){

if(operation.equals("+")){
Log.d("onc","in addition");
return numberOne + runningTotal;
}else if(operation.equals("-")){
Log.d("onc","in subtraction");
return numberOne - runningTotal;
}else if(operation.equals("/")){
Log.d("onc","in division");
return numberOne / runningTotal;
}else if(operation.equals("*")){
Log.d("onc","in multiplication");
return numberOne * runningTotal;
}else{
return 0;
}
}

public void getAnswer(ArrayList<String> toBeExamined){
//get numbers and put them in an array
//get operations and put them in an array
for(int i =0; i < toBeExamined.size(); i++){
String extractingIntegers = toBeExamined.get(i);
// /d matches digits /D matches non digits
String[] numbersInStringformat = extractingIntegers.split("/d");
ArrayList<Integer> numbersInNumberformat = new ArrayList<>();
for(int counter = 0; counter < numbersInStringformat.length; counter++){
numbersInNumberformat.add(Integer.parseInt(numbersInStringformat[counter]));
}
String[] operationsInStringformat = extractingIntegers.split("/D");

int tempAnswer;
int tempIntCounter =0;
int stringCounter =0;
tempAnswer = computeAnswerThreeTerms(numbersInNumberformat.get(tempIntCounter), numbersInNumberformat.get(tempIntCounter+1), operationsInStringformat[stringCounter]);
tempIntCounter = 1;
while(!operationsInStringformat[1].equals("=")){
if(operationsInStringformat[stringCounter].equals("=")){
break;
}
tempAnswer = computeAnswer(numbersInNumberformat.get(tempIntCounter++),operationsInStringformat[stringCounter],tempAnswer);
}
answers[i] = tempAnswer;

}
}

public void initAnswers(){
ArrayList<String> individualCharacters = new ArrayList<>();

for(int i =0; i < questions.length; i++){
//change i to 0 for testing purposes
String questionToGetIndividual = questions[i];
//extracting individual chars
individualCharacters.add(questionToGetIndividual);
}
getAnswer(individualCharacters);
}

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com