he___H 2022-05-06 07: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 08:02
    关注

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

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

报告相同问题?

问题事件

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

悬赏问题

  • ¥15 一道以太网数据传输题
  • ¥15 python 下载群辉文件
  • ¥50 代码还没怎么运行但是需要代码功能调用数据
  • ¥15 vue请求不到数据,返回状态200,数据为html
  • ¥15 用白鹭引擎开发棋牌游戏的前端为什么这么难找
  • ¥35 哪位专业人士知道这是什么原件吗?哪里可以买到?
  • ¥15 关于#c##的问题:treenode反序列化后获取不到上一节点和下一节点,Fullpath和Handle报错
  • ¥15 一部手机能否同时用不同的app进入不同的直播间?
  • ¥20 输入import torch显示Intel MKL FATAL ERROR,系统驱动1%,: Cannot load mkl_intel_thread.dll.
  • ¥15 点云密度大则包围盒小
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部