有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

布尔表达式与gatejava

嗨,我有一个代码,当你输入一个表达式时,它会存储到一个数组中,但我的问题是,当输入表达式像ab+c时,我怎么能把*放在两个变量之间?它表示空值。 这是我的密码:

 stack = strexp.toCharArray();       
 for (int k = 0; k < stack.length; k++) {
   if (Character.isLetter(stack[k]) && Character.isLetter(stack[k+1])){
     temp[k] = stack[k];
     temp[k+1] = '*';
     temp[k+2] = stack[k+1];
   }
 }

共 (2) 个答案

  1. # 1 楼答案

    有两个问题:

    1)NPE-将通过初始化temp[]来解决

    2)在Character.isLetter(stack[k + 1])处的ArrayIndexOutOfBoundsException

    使用此代码可以解决以下两个问题:

        String strexp = "ab+c";
        char[] stack = strexp.toCharArray();
        for (int k = 0; k < stack.length - 1; k++)
        {
            if (Character.isLetter(stack[k]) && Character.isLetter(stack[k + 1]))
            {
                char temp[] = new char[3];
                temp[k] = stack[k];
                temp[k + 1] = '*';
                temp[k + 2] = stack[k + 1];
            }
        }
    
  2. # 2 楼答案

    您应该会收到一个ArrayIndexOutOfBounds异常,因为您会递增k,直到它等于stack数组中的最后一个索引,然后尝试访问stack[k+1]

    循环表达式必须是

    for (int k = 0; k < (stack.length-1); k++)
    

    造成NullPointerException的原因并不直接可见,但我相信您尚未初始化temp数组。很可能是因为你不知道它的确切尺寸

    我会将结果存储在列表中StringBuilder:

    StringBuilder resultBuilder = new StringBuilder();
    for (int k = 0; k < (stack.length-1); k++) {
       resultBuilder.append(stack[k]);
       if (Character.isLetter(stack[k]) && Character.isLetter(stack[k+1])) {
         resultBuilder.append('*');
      }
    }
    resultBuilder.append(stack[stack.length-1]);  // don't forget the last element