我正在尝试用java创建一个递归解析计算器,用于加法、乘法和阶乘,但是在第一部分,我正在努力阅读用户输入,以便将输入拆分为数字和运算符。在调试时,我试着看它哪里出错了,我发现当“+”遍历if else语句时,它只是跳过了它。我真的不确定是什么问题,我最初尝试使用令牌,并分裂成子字符串,但它也不顺利,然后。任何帮助都将不胜感激。谢谢您
package com.company;
import java.util.Scanner;
class Main {
public static void main(String[] param) {
String input = input("Please enter an expression");
int n = input.length()-1;
String[] splitter = input.split("(?<=\\G.)");
split(input, n);
//int result = calculate(input);
//String[] splitter = input.split("(?<=\\G.)");
}
public static String split(String input, int n) {
String[] splitter = input.split("(?<=\\G.)");
System.out.println(splitter[n]);
String symbol = splitter[n];
if (symbol.equals("+")) {
evalADD(n, splitter);
}
if (symbol.equals("*")) {
evalMULT(n, splitter);
}
if (symbol.equals("!")) {
evalFACT(n, splitter);
}
else if (Integer.parseInt(splitter[n]) >= 0 && Integer.parseInt(splitter[n]) <=9)
{
if (n != 0) {
n = n - 1;
split(input, n);
}
}
if (n != 0)
n = n - 1;
split(input, n);
return input;
}
public static int evalADD(int n, String [] splitter){
int arg1;
int arg2;
int result;
arg1 = Integer.parseInt(splitter[n+1]);
arg2 = Integer.parseInt(splitter[n+2]);
result = arg1 + arg2;
return result;
}
public static int evalMULT(int n, String [] splitter){
int arg1;
int arg2;
int result;
arg1 = Integer.parseInt(splitter[n+1]);
arg2 = Integer.parseInt(splitter[n+2]);
result = arg1 * arg2;
return result;
}
public static int evalFACT(int n, String [] splitter){
int arg1;
int arg2;
int result;
arg1 = Integer.parseInt(splitter[n+1]);
arg2 = Integer.parseInt(splitter[n+2]);
result = arg1 - arg2;
return result;
}
public static String input(String message) {
Scanner scanner = new Scanner(System.in);
System.out.println(message);
return (scanner.nextLine());
}
}
2条答案
按热度按时间um6iljoc1#
我注意到你在用
java.util.Scanner
. 我写了一个脚本,它应该按照您的所有标准为您完成任务:用法示例:对于二进制运算符,输入+21,它将为您添加它们。一元输入!它将产生阶乘。现在,您可以使用一元和二元运算符尝试任何组合链和数字排列,它将递归地为您计算值。
例如,考虑输入*3+12:它将1和2相加,然后乘以3,最后计算出整个表达式的阶乘,从而得到预期的362880。
7vux5j2d2#
为什么不将输入计算字符串赋给一个字符数组,然后遍历数组并匹配字符“+”、“-”、“*”?