代码之家  ›  专栏  ›  技术社区  ›  Michael26

乘法公式字符串-java

  •  0
  • Michael26  · 技术社区  · 7 年前

    我正在尝试编写一个包含字符串的代码: (7+5)*(6+9) 并返回字符串: 7*6 + 7*9 + 5*6 + 5*9 我的算法是创建2个字符数组(例如:75,69) 在这2个数组中的O^2循环中运行,从第一个数组复制值,*从第二个数组复制值,+。我得到了边界索引异常,不明白为什么。

    这是我的代码:

     String s = "((7+5)*(6+9))";
    
     char[] ch = s.toCharArray();
     char[] newCh = new char[30];
     int j=0;
     int blocks = 2;
     int newi = 0;
    
     for (int i=0 ; i<ch.length ; i++) {
        if (ch[i]=='(' && ch[i+1]!='(') {
            j=i+1;
            while (blocks>0) {
    
                if (ch[j]==')') {
                    blocks--;
                    newCh[newi]='-';
                    newi++;
    
                }
                if (ch[j]!='+' && ch[j]!='*' && ch[j]!=')' && ch[j]!='(') {
                    if (blocks==0) {
    
                        break;
                    }
                    else {
    
                        newCh[newi]=ch[j];
                        newi++;
                    }
    
                }
                j++;
            }
    
        }
        continue;
     }
    
     System.out.println("new Char array : ");
     for (int i=0 ; i<newCh.length ; i++) {
         System.out.print(newCh[i]);
     }
     System.out.println();
    
     Multy(newCh);
    

    还有我的多重方法:

    public static char[] Multy(char[] ch) {
     char[] newc = new char[50];
     char[] c1 = new char[30];
     char[] c2 = new char[30];
     int newi = 0;
     int i1 = 0;
     int i2 = 0;
     int flag = 0;
    
     for (int i=0 ; i<ch.length ; i++) {
         if (ch[i]!='-') {
             if (flag ==0) {
            c1[i1] = ch[i];
            i1++;
             }
             else {
                 if (ch[i]!='-')
                 c2[i2]= ch[i];
                 i2++;
             }
         }
         if (ch[i]=='-')
             flag = 1;
    
     }
     System.out.println("In func");
    
     System.out.print("c1 : ");
     for (int i=0 ; i<c1.length ; i++) {
         System.out.print(c1[i]);
     }
     System.out.println();
     System.out.print("c2 : ");
     for (int i=0 ; i<c1.length ; i++) {
         System.out.print(c2[i]);
     }
     ///////////
    
    
     for (int i=0 ; i<c1.length ; i++) {
        for (int j=0 ; j<c2.length ; j++) {
            newc[newi]=c1[i];
    
            newc[newi+1] = '*';
    
            newc[newi+2] = c2[j];
    
            newc[newi+3] = '+';
    
            newi+=4;
    
    
        }
     }
    
     System.out.print("NEWc2 : ");
     for (int i=0 ; i<newc.length ; i++) {
         System.out.print(newc[i]);
     }
    
    
     return newc;
    

    }

    1 回复  |  直到 7 年前
        1
  •  0
  •   Ivonet    7 年前

    在te double for循环中,您迭代到数组的末尾(c1.length和c2.length),同时在循环中添加一个数字newc[newi+X],但由于您循环到末尾,您将用完所有位置,并且您将获得IndexOutOfBoundsException。。。

    for (int i=0 ; i<c1.length ; i++) {
        for (int j=0 ; j<c2.length ; j++) {
            newc[newi]=c1[i];
            newc[newi+1] = '*';
            newc[newi+2] = c2[j];
            newc[newi+3] = '+';
            newi+=4;
        }
    }
    

    更新:

    额外解释:-)

    如果你这样做:

    public class ArrayExample {
        public static void main(String[] args) {
            String[] strings = new String[3];
            System.out.println("strings.length = " + strings.length);
            strings[4] = "foo";
        }
    }
    

    输出将为:

    strings.length = 3
    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4
        at nl.ivonet.ArrayExample.main(ArrayExample.java:26)
    

    这是因为我试图在strings数组的索引4处赋值,但strings数组是用 new String[3] 将其固定为3。这就是问题所在,也是代码失败的原因。 数组与列表不同。数组是固定大小的,列表不是。