出于函数目的从拆分中获取Java运算符
好的。。。我想我试图简化这段代码,可能是疯了。我将出于函数目的从拆分中获取Java运算符,java,if-statement,split,match,Java,If Statement,Split,Match,好的。。。我想我试图简化这段代码,可能是疯了。我将(*,+,/,-)等运算符放置在拆分中。知道我想单独调用他们来执行if(operators.equals.(+){ 返回num1+num2.} 然后,对于*,-,/透视图 在我之前的代码中使用数学,如何正确地做到这一点: String function = "[+\\-*/]+"; //this String[] token = input.split(function);//and this double num1 = Double.par
(*,+,/,-)
等运算符放置在拆分中。知道我想单独调用他们来执行if(operators.equals.(+){
返回num1+num2.}
然后,对于*,-,/透视图
在我之前的代码中使用数学,如何正确地做到这一点:
String function = "[+\\-*/]+"; //this
String[] token = input.split(function);//and this
double num1 = Double.parseDouble(token[0]);
double num2 = Double.parseDouble(token[1]);
double answer;
String operator = input.toCharArray()[token[0].length()]+"";
if (operator.matches(function) && (token[0]+token[1]+operator).length()==input.length()) {
System.out.println("Operation is " + operator+ ", numbers are " + token[0] + " and " + token[1]);
} else {
System.out.println("Your entry of " + input + " is invalid");
}
你没有。
仅返回字符串
中不匹配的部分。如果想知道匹配的代码,需要使用更复杂的正则表达式,即and类,或者自己编写String
tokenization类
在本例中,Token
是您自己创建的一个类):
public List generateTokenList(字符串输入){
列表=新的LinkedList();
for(char c:input.toCharArray()){
if(字符isDigit(c)){
//手柄数字盒
}else如果(c=='+'){
//handle plus
}else如果(c=='-'){
//句柄减号
}否则{
/*你明白了吗*/
}
}
}
有一些图书馆可以为你做这件事,比如说,但这听起来像是学校的作业,所以你可能不得不艰难地完成这件事。如果你的
身体像
if (operator.matches(function) &&
(token[0] + token[1] + operator).length() == input.length())
{
double result = 0;
if (operator.equals("+")) {
result = num1 + num2;
} else if (operator.equals("-")) {
result = num1 - num2;
} else if (operator.equals("*")) {
result = num1 * num2;
} else if (operator.equals("/")) {
result = num1 / num2;
}
System.out.printf("%.2f %s %.2f = %.2f%n", num1, operator, num2,
result);
}
您的代码也能按预期工作 对不起,你的问题是什么?我在解析“在我以前的代码中使用数学,如何正确地做到这一点”时遇到了问题?我不是想写数学,我的意思是,我如何放置if和if-else语句,这些语句被认为是用两个数字返回运算符。示例:num1是5运算符是*而num2是1,所以答案是5。如果我的运算符都捆绑在索引中,我该怎么做?那么您正在尝试构建计算器的解析器部分?很抱歉,但是没有(简单的)方法来映射“如果你遇到这个符号,那么就这样做”(你称之为“单独地调用它们”)。您可以做的是将标记映射到方法名,并使用java反射调用该方法。但仅此而已。此外,我不知道与您的不同之处是什么?@mali,我实际上想将我编写的功能齐全的代码升级为行数少得多的代码,因此我决定消除单独调用每个操作符的垃圾,现在我在确保代码的兼容性方面遇到了问题。知道它们是捆绑的,如果选择的操作员是+打电话返回num1+num2,我该如何做。明白了吗?写在重点上,但你能告诉我这是什么?printf(“%.2f%s%.2f=%.2f%n”我建议你读一下.“%.2f”是一个小数点后有两位数字的浮点数,“%s”是一个字符串,而“%n”是新行.所以它会打印类似于“#.####.###.####.####.######.####其中(s)(and)被值替换。
if (operator.matches(function) &&
(token[0] + token[1] + operator).length() == input.length())
{
double result = 0;
if (operator.equals("+")) {
result = num1 + num2;
} else if (operator.equals("-")) {
result = num1 - num2;
} else if (operator.equals("*")) {
result = num1 * num2;
} else if (operator.equals("/")) {
result = num1 / num2;
}
System.out.printf("%.2f %s %.2f = %.2f%n", num1, operator, num2,
result);
}