-1

嗨,我有一个代码,当您输入一个表达式时,它将存储到一个数组中,但我的问题是当输入表达式像 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];
   }
 }
4

2 回答 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
于 2012-02-12T18:23:51.710 回答
0

有2个问题:

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

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

使用此代码来解决这两个问题:

    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];
        }
    }
于 2012-02-12T18:26:05.470 回答