首页 > 解决方案 > 字符串索引异常

问题描述

我试图将表达式从中缀形式转换为后缀形式。我分别使用 String a、p、s 用于堆栈、后缀结果表达式、输入表达式。每次我收到此错误时:

线程“主”java.lang.StringIndexOutOfBoundsException 中的异常:字符串索引超出范围:javaapplication4 的 java.lang.String.charAt(String.java:658) 的 -1.A.conversion(A.java:50) 的 javaapplication4 .A.main(A.java:83)

请帮助我如何解决它。

这是我的代码:

import java.util.Scanner;
    public class A {
    
        String a="(", s = "", p = "";
        int i, n = 1, top = 0, pp = 0;
    
        void push(char ch) {
            a = a + ch;
            top = n;
            n++;
        }
    
        void pop() {
            n--;
            top--;
        }
    
        int prio(char ch) {
            int f = -1;
            if (ch == '(') {
                f = 0;
            } else if (ch == '+' || ch == '-') {
                f = 1;
            } else if (ch == '*' || ch == '/' || ch == '%') {
                f = 2;
            } else if (ch == '^') {
                f = 3;
            }
            return f;
        }
    
        void conversion() {
            System.out.print("Enter infix form: ");
            Scanner sd = new Scanner(System.in);
            s = sd.nextLine();
            //System.out.println(s);
            int t, j, sz;
            sz = s.length();
            for (i = 0; i < sz; i++) {
                if (s.charAt(i) >= '0' && s.charAt(i) <= '9') {
                    p = p + s.charAt(i);
                    pp++;
                } else if (s.charAt(i) == '(') {
                    push('(');
                } else if (s.charAt(i) == '-' || s.charAt(i) == '+' || s.charAt(i) == '*' || s.charAt(i) == '/' || s.charAt(i) == '%' || s.charAt(i) == '^') {
                    j = prio(s.charAt(i));
                    t = prio(a.charAt(top));
                    //System.out.println(t+" "+j);
                    while (j <= t) {
                        p = p + a.charAt(top);
                        pp++;
                        pop();
                        t = prio(a.charAt(top));
                    }
                    push(s.charAt(i));
                } else if (s.charAt(i) == ')') {
                    while (a.charAt(top) != '(') {
                        p = p + a.charAt(top);
                        pp++;
                        pop();
                    }
                    pop();
                }
            }
            while (a.charAt(top) != '(') {
                p = p + a.charAt(top);
                pp++;
                pop();
            }
            pop();
        }
    
        void postfix() {
            System.out.print("postfix form is: ");
            System.out.println(p);
        }
    
        public static void main(String args[]) {
            A h = new A();
            h.conversion();
            h.postfix();
            //System.out.println(h.a);
            //System.out.println(h.s);
        }
    }

标签: java

解决方案


你可能做了一个额外的 pop() 定义。你能检查一下吗?


推荐阅读