我有这个程序,需要从两个表达式中提取两个数字和一个符号:

**111*369**


但在这儿:

for(i=0; i<t; i++) {
while(w) {
    if(ar1[i].charAt(j)=='+' || ar1[i].charAt(j)=='-' || ar1[i].charAt(j)=='*' || ar1[i].charAt(j)=='/') {
        w = false;
    }
    else {
        k = ar1[i].charAt(j);
        a = a*10 + (long)(k-48);
    }
}


程序永远不会进入if语句内部。它陷入无限循环。

那么为什么不检查符号呢?

这是带有输出的完整程序的链接:My Program

最佳答案

您的while循环始终检查条件中的相同字符,因为您从不递增j。因此,如果该字符不是运算符,则循环将永远不会终止。

您应该在每次迭代中递增j,并注意不要递增j超过最后一个索引ar1[i]

    while(w && j < ar1[i].length) {
        if(ar1[i].charAt(j)=='+' || ar1[i].charAt(j)=='-' || ar1[i].charAt(j)=='*' || ar1[i].charAt(j)=='/') {
            w=false;
        }
        else {
            k=ar1[i].charAt(j);
            a=a*10+ (long)(k-48);
        }
        j++;
    }

08-03 16:51