В настоящее время я создаю игру для математики, которая выдает случайные арифметические вопросы пользователю. У меня есть функция, в которой он создает вопросы и сохраняет их в массиве строк. Вопросы могут различаться в количестве целых чисел, присутствующих в вопросе; например вопрос может быть 3 + 4-9/3 = или 4 * 2/9 =, но минимальное количество целых чисел, которое должно присутствовать, равно 2. например. 3 + 4 = и т. Д.Как вычислить выражение слева направо
То, что я пытаюсь сделать, - это оценить вопрос, прочитав его слева направо, игнорируя порядок операций. Например. 4 + 2 * 5 = должна быть равна 30 вместо 14.
Мое мышление к этой проблеме заключается в следующем:
Получить вопрос, зацикливание через строку и извлекать отдельные символы и хранить их в ArrayList. Преобразуйте эти символы в int и сначала оцените первые три элемента в arraylist, сохраните ответ во временной переменной int. Получите следующие 2 элемента и проверьте, не содержит ли они знак равенства, если он не оценивает временное значение int этими двумя элементами. Продолжайте делать это, пока он не найдет знак равенства. Если он найдет знак равенства, остановите итерацию и произведите результат.
Какова моя проблема в том, что я не могу преобразовать операции +, -, *,/в значения 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);
}
если Youre игнорируя порядок операций, то почему бы не просто прочитать строку из не слева направо полукокса-на-гольца, пока вы достигните символа без цифр, и это ваш первый номер и т. д. и т. д. – Infested
@Infested, но как узнать, нужно ли мне добавлять, умножать, вычитать это число и т. д.? –
вы можете читать и проверять каждый символ, и если это не номер, это одна из четырех операций с полем –