我正在尝试制作一个计算器应用程序,并且我输入了最后一个等式的字符串。 “983 + 388 + 12” 我的解决方法是首先确定运营商的位置。在此之后,我循环向前和向前试图找到2个数字,然后我添加它们。所以我会找到加号然后是983和388并添加它们。我无法匹配与添加符号相关的上一个/下一个数字。
public static void main(String[] args)
{
int plus=0;
String string="983+388+12";
//locating Plus symbol
for(int i=0;i<string.length();i++)
{
if(string.charAt(i)=='+')
{
plus=i;
}
}
//locating next number (should be 388)
for(int i=plus+1;i<string.length();i++)
{
if(string.charAt(i)=='+' || string.charAt(i)=='-')
{
String nextNumber=string.substring(plus+1, i-1);
System.out.println(nextNumber);
break;
}
}
我没有收到任何返回的值作为nextNumber的值
答案 0 :(得分:5)
当您在第一个循环中找到+
时,您不会停止扫描该字符串。这会导致plus
标记最后一个+
的位置,该位置在388之后和12之前。第二个循环从未找到+
或-
之后的位置最后+
,所以没有打印过。找到第一个+
,break
离开循环。
此外,为了避免仅找到38
,请更正您的substring
来电,其结尾索引为独占。
String nextNumber = string.substring(plus + 1, i);
答案 1 :(得分:1)
尝试只使用一个循环,见下文(工作示例)。我没有把任何东西分解成更小的方法。
public static void main(String[] args) {
String string="983+388+12";
String numberStr="0";
int lastSignPos = 0;
int signPos=0;
char sign = '+';
int total=0;
//locating Plus symbol
for(int i=0; i < string.length(); i++) {
if(string.charAt(i)=='+' || string.charAt(i)=='-') {
lastSignPos = signPos;
signPos = i;
numberStr = "0";
if (lastSignPos == 0){
// first number in series
numberStr = string.substring(0,signPos);
} else {
numberStr = string.substring(lastSignPos + 1, signPos);
}
sign = '+';
if (string.charAt(lastSignPos)=='-'){
sign = '-';
}
total += Integer.parseInt(sign + numberStr);
}
}
// take care last number
numberStr = string.substring(signPos+1);
sign = '+';
if (string.charAt(signPos)=='-'){
sign = '-';
}
total += Integer.parseInt(sign + numberStr);
System.out.println(total);
}
答案 2 :(得分:0)
您可以尝试这样的事情:
String example = "123+456+678";
String delim = "+";
StringTokenizer st = new StringTokenizer(example,delim);
while (st.hasMoreElements()) {
System.out.println("StringTokenizer Output: " + st.nextElement());
}