he___H 2022-05-06 15:41 采纳率: 75%
浏览 21
已结题

为什么while循环调转顺序就会报错

问题遇到的现象和发生背景

第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;
    }



}

运行结果及报错内容

img

img

我的解答思路和尝试过的方法
我想要达到的结果
  • 写回答

3条回答 默认 最新

  • 於黾 2022-05-06 16:02
    关注

    &&是逻辑与,有短路特性
    当前面的条件不满足,将不继续执行后续的判断
    当i<s.length(),说明索引没有溢出,才可以继续进行后续的判断
    你不先判断索引溢出不溢出,那就会造成索引溢出,或者叫数组越界

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 5月14日
  • 已采纳回答 5月6日
  • 创建了问题 5月6日

悬赏问题

  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥15 键盘指令混乱情况下的启动盘系统重装
  • ¥40 复杂的限制性的商函数处理