第23行将i<s.length()放到 (c=s.charAt(i))>= 48 && (c=s.charAt(i)) <= 57后面就会报错,放到前面就能正常运行,没有想明白为什么会这样
package 栈;
import java.util.ArrayList;
import java.util.List;
public class PolandNotation {
public static void main(String[] args) {
List<String> infixExpression = toInfixExpression("3+4*50-6");
System.out.println(infixExpression);
}
public static List<String> toInfixExpression(String s) {
List<String> ls = new ArrayList<>();
String str;
int i = 0;
char c;
do {
if ((c = s.charAt(i)) < 48 || (c = s.charAt(i)) > 57) {
ls.add("" + c);
i++;
} else {
str ="";
while ( i<s.length() && (c=s.charAt(i))>= 48 && (c=s.charAt(i)) <= 57 ){
str += c;
i++;
}
ls.add(str);
}
} while (i < s.length());
return ls;
}
}
class operation{
private static int ADD=1;
private static int SUB=1;
private static int MUL=2;
private static int DIV=2;
public static int getVaule(String operation){
int result=0;
switch(operation){
case "+":
result=ADD;
break;
case "-":
result=SUB;
break;
case "*":
result=MUL;
break;
case "/":
result=DIV;
break;
default:
System.out.println("不存在该运算符" + operation);
break;
}
return result;
}
}
&&是逻辑与,有短路特性
当前面的条件不满足,将不继续执行后续的判断
当i<s.length(),说明索引没有溢出,才可以继续进行后续的判断
你不先判断索引溢出不溢出,那就会造成索引溢出,或者叫数组越界
第23行将i<s.length()放到 (c=s.charAt(i))>= 48 && (c=s.charAt(i)) <= 57后面就会报错,放到前面就能正常运行
因为java 条件执行是断路执行,前面条件能满足,后面就不执行了,所以不会报错哈。
望采纳,谢谢!不清楚可以再问
因为&&是前面为false,后面的代码就直接不执行了,
如果i<s.length()放到后面,当执行到最后一位后i++,while执行c=s.charAt(i)这个语句就会超出索引,所以报错