给定一个表示简单算术表达式的字符串,求解它并返回其整数值。表达式由两个数字组成,数字之间带有+或 - 运算符,即x + y或x-y形式,其中x和y不是负数
MyApproach
我创建了NewString并存储了第一个字符串,直到操作符没有到来。我将操作符放在字符位置。我创建了第二个字符串并将其余的字符串存储到新的String.I然后将它们转换为数字使用parseInt.And然后我添加了数字。
我想做什么123 + 82 = 205
我正在做123 + 43 + 82 = 248.我无法弄清楚如何定位角色。
任何人都可以指导我做错了吗?
public int solve(String str)
{
String strnew1="";
String strnew2="";
int i=0;
char ch1=str.charAt(i);
while((ch1>=48)&&(ch1<=57))
{
strnew=strnew+ch1;
i++;
}
int p=str.charAt(i);
i++;
while((ch1>=48)&&(ch1<=57))
{
strnew2=strnew2+ch1;
i++;
if(i==str.length())
{
break;
}
}
int n1=Integer.parseInt(strnew1);
int n2=Integer.parseInt(strnew2);
n1=n1+p+n2;
return n1;
}
测试用例结果。
Parameters Actual Output ExpectedOutput
123+82 248 205
答案 0 :(得分:1)
这是完成任务的好方法。基本上,你迭代直到你找到'+'r' - '符号,同时将字符附加到字符串。现在保持一个布尔值,告诉您在到达符号时添加或减去并设置此值。现在,遍历运算符符号并将字符附加到另一个字符串。最后,将它们解析为整数,加/减它们并返回结果。
public static int Solve(String input) //Assume input="100+50" for eg.
{
int cnt=0;
boolean op=false; //Default set to subtract
String raw_a="", raw_b="";
while(input.charAt(cnt)!='+')
raw_a+=input.charAt(cnt++); //The first part
if(input.charAt(cnt)=='+') //setting the operation
op=true;
cnt++;
while(cnt!=input.length())
raw_b+=input.charAt(cnt++); //the second part
int a=Integer.parseInt(raw_a), b=Integer.parseInt(raw_b); //parsing them
int ans =op? a+b: a-b; //If true then add else subtract
return ans; //Return the ans
}
答案 1 :(得分:0)
+
- &gt;的ASCII值是多少? 43
。
248
和205
,43
之间有什么区别。
弄错了?
您实际上并没有添加这两个数字,而是使用运算符的ASCII值添加这两个数字。
你应该做的是。
if(p == '+')//check if it is a addition
{
sum = n1 + n2;
}
else
sum = n1 - n2;
答案 2 :(得分:0)
你不能像这样使用这个算子。
好吧,你添加
int p=str.charAt(i);
如果charAt(i)是'+'符号,则通过隐式地将char转换为int来添加额外的43('+'== ascii 43)。
更好地定义2个案例('+'/' - ')并使用运算符:
if (p == 43) { //or p == '+'
return n1 + n2;
} else if (p == 45) { //or p == '-'
return n1 - n2
}
return -1; //undefined