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日

悬赏问题

  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)
  • ¥15 Vue3地图和异步函数使用
  • ¥15 C++ yoloV5改写遇到的问题
  • ¥20 win11修改中文用户名路径
  • ¥15 win2012磁盘空间不足,c盘正常,d盘无法写入
  • ¥15 用土力学知识进行土坡稳定性分析与挡土墙设计
  • ¥70 PlayWright在Java上连接CDP关联本地Chrome启动失败,貌似是Windows端口转发问题
  • ¥15 帮我写一个c++工程
  • ¥30 Eclipse官网打不开,官网首页进不去,显示无法访问此页面,求解决方法
  • ¥15 关于smbclient 库的使用