Булево выражение и гейт Java - PullRequest
0 голосов
/ 12 февраля 2012

Привет, у меня есть код, который, когда вы вводите выражение, оно будет сохранено в массиве, но моя проблема заключается в том, как я могу поместить * между двумя переменными, когда входное выражение похоже на 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 ]

2 голосов
/ 12 февраля 2012

Вы должны получить исключение ArrayIndexOutOfBounds, потому что вы увеличиваете k до тех пор, пока оно не станет равным последнему индексу в массиве stack и , затем вы попытаетесь получить доступ к stack[k+1].

Ваше выражение цикла должно быть

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

Причина NullPointerException не видна напрямую, но я считаю, что вы не инициализировали массив temp.Скорее всего, потому что вы не знаете его точный размер.

Я бы вместо этого сохранил результат в list 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
0 голосов
/ 12 февраля 2012

Существует 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];
        }
    }
...